我正在读取一个十六进制的二进制文件。下面的代码是读取二进制文件,但我不知道如何删除文件中间的4个字节。但我不知道如何删除文件中间的4个字节。
import os
import struct
with open("esears36_short.dat", "rb") as f:
data = f.read(2)
number = struct.unpack(">h", data)[0]
f.seek(number, 1)
#need to code to remove 4 bytes
我需要在循环中执行这段代码,直到EOF。读取二进制文件时,每隔n个字节就删除4个字节。number
字段。
的值。number
此处的字段:28045
请帮助我!我正在读取一个十六进制的二进制文件。
要删除4个字节,你必须将剩余的文件向前复制4个字节,这可能是混乱的,因为你在同一个文件中读和写缓冲区。写一个新的文件并重命名会更容易。在这种情况下,你只需根据需要向前寻找4个字节。
import os
import struct
with open("esears36_short.dat", "rb") as f, open("esars32_short.dat.tmp", 'wb') as f_out:
data = f.read(2)
number = struct.unpack(">h", data)[0]
f.seek(2, 1)
while True:
buf = f.read(number)
if not buf:
break
f_out.write(buf)
f.seek(4, 1) # 4 bytes forward
os.remove("esears36_short.dat")
os.rename("esars32_short.dat.tmp", "esears36_short.dat")
虽然你写的是一个新文件,但你做的实际复制比较少。