在二进制文件中寻找到特定位置后删除4个字节 - python

问题描述 投票:0回答:1

我正在读取一个十六进制的二进制文件。下面的代码是读取二进制文件,但我不知道如何删除文件中间的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

请帮助我!我正在读取一个十六进制的二进制文件。

python binaryfiles
1个回答
1
投票

要删除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")

虽然你写的是一个新文件,但你做的实际复制比较少。

© www.soinside.com 2019 - 2024. All rights reserved.