You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二进制文件读取异常: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:34:54