首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从文件末尾删除N个字节,仅当它们与指定的字节数组匹配时

从文件末尾删除N个字节,仅当它们与指定的字节数组匹配时,可以通过以下步骤实现:

  1. 打开待处理的文件,以读写模式打开。
  2. 将文件指针移动到文件末尾。
  3. 读取文件末尾的N个字节,并将其与指定的字节数组进行比较。
  4. 如果匹配成功,则将文件指针移动到匹配字节的起始位置。
  5. 使用截断模式打开文件,将文件指针移动到匹配字节的起始位置。
  6. 将文件指针后面的内容截断,即删除了N个字节。
  7. 关闭文件。

以下是一个示例的Python代码实现:

代码语言:txt
复制
import os

def delete_bytes_from_file_end(file_path, bytes_to_delete):
    # 打开文件,以读写模式打开
    with open(file_path, 'r+b') as file:
        # 将文件指针移动到文件末尾
        file.seek(0, os.SEEK_END)
        
        # 读取文件末尾的N个字节
        file.seek(-len(bytes_to_delete), os.SEEK_END)
        data = file.read()
        
        # 将读取的字节与指定的字节数组进行比较
        if data == bytes_to_delete:
            # 移动文件指针到匹配字节的起始位置
            file.seek(-len(bytes_to_delete), os.SEEK_END)
            
            # 使用截断模式打开文件
            file.truncate()
    
    # 关闭文件
    file.close()

# 示例用法
file_path = 'path/to/file.txt'
bytes_to_delete = b'example'
delete_bytes_from_file_end(file_path, bytes_to_delete)

这段代码会打开指定路径的文件,将文件指针移动到末尾,并读取末尾的N个字节进行比较。如果匹配成功,则将文件指针移动到匹配字节的起始位置,并使用截断模式打开文件,截断文件指针后面的内容,即删除了N个字节。最后关闭文件。

请注意,这只是一个示例实现,具体的实现方式可能因编程语言和操作系统而异。在实际应用中,还需要考虑异常处理、文件权限等因素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

开心档-软件开发入门之Ruby 数组(Array)

Ruby 数组不需要指定大小,数组添加元素,Ruby 数组会自动增长。 ​​创建数组​​ 有多种方式创建或初始化数组。...12 array.abbrev(pattern = nil) 为 self 中字符串计算明确缩写集合。如果传递一模式或一字符串,只考虑字符串匹配模式或者以该字符串开始情况。...如果匹配则返回第一包含数组,如果未找到匹配则返回 nil。 14 array.at(index) 返回索引为 index 元素。一负值索引 self 末尾开始计数。...如果匹配则返回第一包含数组。 51 array.reject { |item| block } 返回一数组,包含 block 不为 true 数组项。...{ |item| block }  block 为真 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if。

1.3K30

开心档-软件开发入门之Ruby 数组(Array)

Ruby 数组不需要指定大小,数组添加元素,Ruby 数组会自动增长。创建数组有多种方式创建或初始化数组。...12array.abbrev(pattern = nil) 为 self 中字符串计算明确缩写集合。如果传递一模式或一字符串,只考虑字符串匹配模式或者以该字符串开始情况。...23array.delete_if { |item| block }  block 为 true 删除 self 每个元素。...如果匹配则返回第一包含数组。51array.reject { |item| block } 返回一数组,包含 block 不为 true 数组项。52array.reject!...{ |item| block }  block 为真 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if。

1.6K30
  • 【Java】IO 操作详解

    因为文件删除失败了,File 类中 delete() 方法只能删除指定文件,假如 File 对象代表一目录,而且这个目录下包含子目录或文件,则 File 类中 delete() 方法 不允许删除整个目录...指定字节数组中,返回整数表示读取字节数 int read (byte[ ] b, int off, int len) 输入流读取若干字节,把它们保存到参数 b 指定字节数组中,off指定字节数组保存数据起始索引...,一次写一字节数组数据 void write(byte[] b, int off, int len) 将指定 byte 数组偏移量off(起始索引)开始 len字节写入此文件输出流 void flush...例如,读取一不存在文件,控制台会报告异常信息, 读取一不存在文件,程序就会有一潜在问题。...:创建BufferedInputStream将创建一内部缓冲区数组.流中读取或跳过字节时,内部缓冲区将根据需要从所包含输入流中重新填充,一次很多字节 字节流缓冲区核心优势就是一次读取多个字节数据

    10710

    egrep命令

    这使调用进程能够继续(恢复)搜索,grep在NUM匹配行之后停止,它输出任何后面的上下文行。-c或--count选项也被使用时,grep不会输出大于NUM计数。...默认情况下,在MS-DOS和MS Windows下,grep通过查看文件中读取第一32KB内容来猜测文件类型。...指定-U会推翻这种猜测,导致读取所有文件并逐字传递给匹配机制,如果文件是一文本文件,每行末尾都有CR/LF对,这将导致某些正则表达式失败。此选项对MS-DOS和MS Windows以外平台无效。...-x, --line-regexp: 选择整行完全匹配那些匹配项。 -Z, --null: 输出零字节(ASCII NULL字符),而不是通常在文件名后字符。...); # printf("Hello World\n"); # printf("Hello World\n"); 输出文件整行匹配行。

    1.4K10

    Linux基础指令及其作用之文件内容查看和处理

    -s, --squeeze-blank:删除连续空行,保留一行。 -v, --show-nonprinting:显示不可打印字符,除了换行和制表符。...tail tail 命令用于显示文件尾部内容,默认情况下显示最后 10 行。它在需要查看文件末尾部分内容非常有用,特别是查看日志文件最新日志。 tail [选项] [文件...]...文件:是要搜索文件名。 grep 命令会在指定文件中搜索匹配模式行,并将匹配行打印到标准输出。如果不指定文件名,则 grep 将会标准输入读取数据进行搜索。...硬链接是文件系统中指向原始文件 inode 新路径,它们原始文件在磁盘上存储位置相同,因此对硬链接或原始文件修改都会影响到另一。...-exec:对匹配文件执行指定命令。 wc wc(word count)命令用于统计文件字数、行数、字节数等信息。它是一非常实用工具,尤其在处理文本文件

    10410

    字符函数和字符串函数模拟实现及KMP算法

    因此C语言还给我们提供了另外几种相对安全字符串函数,即strncpy,strncat,strncmp。它们比原字符串函数多了一参数,这个参数是用于指定操作字节数。...strncat 函数功能 字符串追加,将一字符串中num个字节内容拷贝到另一字符串末尾,并在末尾补充’\0’。...其实关于子串回退位置,KMP给定了一next数组用于保存子串在某个位置匹配失败后应该回退位置。 next数组 用next[ j ]=k 来表示子串在某个位置匹配失败应该回退位置。...因此 j 为负一应该直接进入循环。...); 模拟实现 memove参数memcpy参数相同,那么memmove是如何实现重叠空间拷贝呢?

    50600

    IO流操作

    释放资源 关闭此输入流并释放该流关联所有系统资源 示例: 读取文件四步走: 1、建立一流对象,将已经存在文件加载进流 2、创建一临时存放数据数组 3、调用流对象读取方法...void write(byte[] b) 将 b.length 个字节指定 byte 数组写入此输出流。...void write(byte[] b,int off,int len) 将指定 byte 数组偏移量 off 开始 len 个字节写入此输出流。...套用某人一句话:没有什么是加一层解决不了问题,不行就再加一层 使用BufferedInputStream读取字节文件,BufferedInputStream会一次性文件中读取8192(8Kb...), 存在缓冲区中,直到缓冲区装满了,才重新文件中读取下一8192字节数组

    16430

    Linux 常用命令

    -C n 采用上下文输出格式(提供 n 行上下文)。 -e 产生一合法 ed 脚本作为输出。 -r file1 和 file2 是目录,递归作用到各文件和目录上。...-size n[bckw] 查找指定文件大小文件n 后面的字符表示单位,缺省为 b,代表512字节块。...-b 在输出每一行前显示包含匹配字符串行在文件字节偏移量。 -c 只显示匹配数量。 -i 比较不区分大小写。 -h 在查找多个文件,指示grep不要将文件名加入到输出之前。...-l 显示首次匹配串所在文件名并用换行符将其隔开。 当在某文件中多次出现匹配,不重复显示此文件名。 -n 在输出前加上匹配串所在行行号(文件首行行号为1)。 -v 只显示不包含匹配行。...实例 # 将所有的 .js 文件移至 src 子目录中。 $ mv -i *.js src 2.11. tail 示指定文件末尾内容,不指定文件,作为输入信息进行处理。常用查看日志文件

    1.6K10

    文件操作(File类等)API摘要

    返回: 包含控制台读取密码字符数组,该字符数组不包含任何行终止符;如果已到达流末尾,则返回 null。...返回: 当成功删除文件或目录,返回true;否则返回 false **************************************************************...参数: dest – 指定文件新抽象路径名 返回: 重命名成功,返回 true;否则返回 false ***************************************...随机访问文件行为类似存储在文件系统中大型 byte 数组。存在指向该隐含数组光标或索引,称为文件指针;输入操作文件指针开始读取字节,并随着对字节读取而前移此文件指针。...如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作文件指针开始写入字节,并随着对字节写入而前移此文件指针。写入隐含数组的当前末尾之后输出操作导致该数组扩展。

    77420

    C语言string.h所有函数汇总

    为避免溢出,目标指向数组大小应足够长,以包含源相同 C 字符串(包括终止空字符),并且不应在内存中源重叠。参数Parametersdestination指向要在其中复制内容目标数组指针。...num 字节 ptr2 指向第一字节数进行比较,如果它们匹配,则返回零,如果不匹配,则返回一不同于零值,表示哪个更大。...此函数开始比较每个字符串第一字符。如果它们彼此相等,则继续执行下一对,直到字符不同或到达表示字符串末尾空字符。此函数行为取决于所选 C 语言环境LC_COLLATE类别。...然后令牌开头开始扫描分隔符中包含第一字符,该字符将成为令牌末尾。如果找到终止空字符,扫描也会停止。...返回值Return Value如果找到令牌,则指向令牌开头指针。否则为空指针。当在正在扫描字符串中到达字符串末尾(即空字符),始终返回空指针。

    73100

    基础数据类型之String

    字符字节数组 在继续下去之前,再次简单介绍下字符字节数组关系 字符到字节,是一编码过程 字节到字符是一解码过程 同样字符,在不同字符集和编码方式下,实际存储值,将是不同 比如前面说...,他们按照当初编码方式进行解码,必然对应还是同样那个字符 操作系统文件都是以字节序列形式存储,所以任何一文件都是有编码 比如你在txt文件中输入了一字符这个字符 底层就会使用指定编码存储到字节中软件本身又把这个编码以字符形式呈现出来所以你才看得到是一字符比如这个文件中.../ 是否指定查找范围  8方法 indexOf是从前往后匹配  匹配是第一 如果指定了下标索引,索引处往后找   返回值要  大于等于 索引 lastIndexOf是后往前匹配  匹配是最后一...(CharSequence) 这两方法   分别针对参数StringBuffer  和 CharSequence 他们都是  表示相同 char 值序列,结果才为 true 比较也是内容...,则返回池中字符串 否则,将此 String 对象添加到池中,并返回此 String 对象引用   它遵循以下规则:对于任意两个字符串 s 和 t, s.equals(t) 为 true

    76220

    JDK1.9-字节

    、视频等)在存储,都是以二进制数字形式保存,都一字节,那么传输一样如此。...public void write(byte[] b):将 b.length字节指定字节数组写入此输出流。...public abstract void write(int b) :将指定字节输出流。 小贴士: close方法,完成流操作,必须调用此方法,释放系统资源。...public int read(byte[] b): 输入流中读取一些字节数,并将它们存储到字节数组 b中 。 小贴士: close方法,完成流操作,必须调用此方法,释放系统资源。...使用字节数组读取:read(byte[] b),每次读取b长度个字节数组中,返回读取到有效字节个数,读取到末尾,返回-1 ,代码使用演示: public class FISRead {

    38610

    Java进阶-IO(4)

    (list() 方法返回数组包含文件名称,而不包含路径) String[] list(FilenameFilter filter):返回数组包含符合 filter 过滤器文件和目录,如果 filter...二、动态读取文件内容 所谓动态读取,就是文件任意位置开始访问文件,而不是必须文件开始位置读取到文件末尾。...程序新创建一 RandomAccessFile 对象,指针位于文件头(也就是 0 处),读/写了 n字节后,文件记录指针将会向后移动 n字节。...文件中读取一带符号位字节 char readChar() 文件中读取一字符 int readlnt() 文件中读取一带符号位整数 long readLong() 文件中读取一带符号位...3)何时使用 1.字节和字符之间有转换动作; 2.流操作数据需要编码或解码; - 编码:字节/字节数组---->字符/字符数组 - 解码:字符/字符数组---->字节/字节数组 转换流作用:提供字节字符流之间转换

    16221

    Java实现文件写入——IO流(输入输出流详解)

    Java是面向对象程序语言,每一数据流都是一对象,它们提供了各种支持“读入”“写入”操作流类。...: FileInputStream类 文件字节输入流可以指定路径文件中读取字节数据。...字符流以字符为单位传送数据,只能传送文本类型数据。使用字符输入输出流好处是,读取中文不会出现乱码问题,而使用字节输入输出流,却不能保证这一点。...mark()方法位置 void mark(int readLimit) 将当前输入流中做标记,调用reset方法将返回到该位置,标记位置开始,到再读入readLimit个字符为止,这个标记都维持有效...只要有一方法不支持,则返回-1 long skip(long n) 跳过参数n指定字符数量,并返回所跳过字符数量 Abstract void close() 关闭字符输入流,并释放之关联所有资源

    2.2K31

    Wireshark 4.0.0 如约而至,这些新功能更新太及时了!

    例如,所有 tcp.port 字段都匹配条件,表达式“all tcp.port > 1024”才为真,以前只有在任何一字段匹配才返回 true 默认行为受支持。...大多数编程语言一致,逻辑 AND 现在比逻辑 OR 具有更高优先级。 现在可以使用负索引末尾索引协议字段。...所有 a 都等于 b ,表达式“a === b”为真。"===" 否定现在可以写成 "!==" (any_ne)。 “==”别名“any_eq”和“!=”别名“all_ne”已添加。...命令和“text2pcap十六进制转储导入”功能已更新和增强: text2pcap支持以窃听库支持所有捕获文件格式编写输出文件,使用、和相同-F选项。...选择 pcapng-n标志(而不是以前默认值 pcap)已被弃用,并将在未来版本中删除。 text2pcap支持使用带有选项窃听库短名称选择输出文件格式封装类型,-E类似于.

    2.5K20

    Java 中文官方教程 2022 版(八)

    参数索引 允许您显式匹配指定参数。您还可以指定 < 来匹配上一格式说明符相同参数。...方法接受可变参数,您可以传递逗号分隔值列表或值数组(CopyOption[])。...静默失败在您有多个线程删除文件很有用,您不希望因为一线程先执行删除操作就抛出异常。...例如,在支持 POSIX 标准集(如 UNIX)文件系统上,您可以在创建文件指定文件所有者、组所有者或文件权限。管理元数据页面解释了文件属性,以及如何访问和设置它们。...然后,文件开头读取 12 个字节,并在该位置写入字符串"I was here!“。文件中的当前位置移动到末尾,并将开头 12 个字节追加。最后,追加字符串"I was here!”

    5500

    客快物流大数据项目(八十九):ClickHouse数据类型支持

    FixedString(N)固定长度 N 字符串,N必须是严格正自然数。服务端读取长度小于N字符串时候,通过在字符串末尾添加空字节来达到N字节长度。...服务端读取长度大于N字符串时候,将返回错误消息。String相比,极少会使用FixedString,因为使用起来不是很方便。...1)在插入数据,如果字符串包含字节数小于N,将对字符串末尾进行空字节填充。如果字符串包含字节数大于N,将抛Too large value for FixedString(N)异常。...2)在查询数据,ClickHouse不会删除字符串末尾字节。如果使用WHERE子句,则须要手动添加空字节匹配FixedString值(例如:where a=’abc\0’)。...注意,FixedString(N)长度是常量。由空字符组成字符串,函数length返回值为N,而函数empty返回值为1。

    3K51

    Linux 命令 | 每日一学,文本处理之文件内容查看实践

    $ less f1.txt f2.txt # 打开多个文件,使用如下命令在多个文件之间切换 :n - 浏览下一文件 :p - 浏览前一文件 # 示例2.正在浏览一文件,使用 :e 打开另一文件...(常用) --pid= # “-f”选项连用,指定进程号进程终止后,自动退出tail命令; -q, --quiet, --silent # 有多个文件参数,不输出各个文件名;...-s, --sleep-interval=N # “-f”选项连用,指定监视文件变化时间隔秒数; (常用) -v # 有多个文件参数,总是输出各个文件名; -z, --zero-terminated...headtail联合使用取文件11行到20行 head -n 20 demo.txt | tail -n 10 # 6.第二行显示到末尾,以及显示倒数第二行到末尾 tail -n+2 /etc/...-f 格式文件 指定包含一或多个换行符分隔格式字符串文件 -n 长度:解释输出长度字节。 -s 偏移:输入开头跳过偏移字节。 -v :使hexdump显示所有输入数据。

    10710

    《Linuxunix Shell编程指南》 总结

    1)如果要在当前目录下所有.doc文件中查找字符串“sort” ,方法:$ grep "sort"*.doc 2)文件内容查找匹配指定字符串行: grep "被查找字符串" 文件名 3)文件内容查找正则表达式匹配行...如果值前面没有 +(加号)或 -(减号),那么文件末尾指定单元号开始读取文件。 主要参数: -b Number Number 变量表示 512 字节块位置开始读取指定文件。...-c Number Number 变量表示字节位置开始读取指定文件。...-k Number Number 变量表示 1KB 块位置开始读取指定文件。 -m Number Number 变量表示字节字符位置开始读取指定文件。...{h;d;}' -e x文件只有一行,不输出 awk '{ B=A;A=$0} END{ print B}'文件只有一行,输出空行 4、只显示匹配正则表达式行 sed -n '/good

    5.5K30
    领券