二进制文件读取异常:readline遇0x0A中断,如何实现纯二进制读取?
问题解决:二进制文件读取避免换行符中断
问题核心在于你使用了readline(32)——这个方法是按文本行逻辑读取的,会把二进制中的0x0A(对应ASCII的\n换行符)识别为行结束标记,导致提前终止读取,无法获取完整的32字节块。
要实现纯二进制无编码读取,直接用file.read(32)替换readline(32)即可。read(n)方法会严格读取指定数量的字节,完全忽略内容中的特殊字节(比如换行符、空字节),完美匹配你读取固定大小二进制块的需求。
修改后的代码如下:
from struct import unpack offsets = [1,3,4,4,4,4,4,4,2,1,1] i = 0 zum={} with open('file.bin', 'rb') as file: data_offset = unpack("<I",file.read(16)[12:16])[0] anz_pmcblock = int(data_offset/32) file.seek(0) for n in range(0,anz_pmcblock): # 替换readline为read,固定读取32字节 pmcblock = file.read(32) # 可选:处理文件末尾可能出现的不完整块 if len(pmcblock) < 32: break j=0 for off in offsets: if j==0: zum[i]=[pmcblock[j:j+off]] j+=off else: zum[i].append(pmcblock[j:j+off]) j+=off i+=1
额外说明:
- 你已经用
'rb'模式打开文件,这本身就是纯二进制读取模式,不会对字节做编码转换,问题仅出在读取方法的选择上。 - 加入
len(pmcblock) <32的判断,可以避免文件实际长度不足时,处理不完整的块导致后续切片操作出错。
内容的提问来源于stack exchange,提问作者avatrax
相关产品推荐
相关产品推荐

