我正在尝试用Python读取二进制文件。该文件由数千行组成,每行2957字节长(1字节布尔值,后跟739字节整数)
我尝试了this suggestion但这不起作用(程序永远运行)
这是我当前的设置,但是我在迭代文件时遇到了麻烦:
with open("bin-file", "rb") as f:
for line in f:
# Here I deal with every line
问题是循环中的每一行都是不同的长度,并且行数与文件中的实际行数不对应。我假设Python发现,它认为是什么,二进制数据中的行尾标记,但那些不符合行的实际结束。
我尝试的另一个选项涉及struct.unpack()
函数逐行解包,因为我确切知道每行有多少字节。
import struct
unpack_str = '=?iiiiiiii...' # The actual string contains 739 i's
n_bytes = 2957 # There are 2957 bytes per line
with open("bin-file", "rb") as f:
line_bin = f.read(n_bytes)
line_str = struct.unpack(unpack_str,line_bin)
这样可行,但只返回第一行。我怎么会遍历所有的行,直到我达到EOF,知道每一行都是n_bytes
长?