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

如何在Python二进制文件操作中使用seek()获取指定偏移位置的内容

问题原因
  • Python内置文件对象的seek()方法作用仅为移动读写指针到指定偏移位置,返回值固定为移动后指针距离文件开头的字节数,本身不具备读取该位置内容的能力,你拿到的返回值6是方法的正常返回结果。
  • 你现有代码中itaOpened.read()为冗余操作,会一次性读取整个文件内容到内存,无意义且浪费性能。
解决方法

移动指针到指定偏移后,调用read()方法读取对应长度的字节,再转换为你需要的十六进制/十进制数值即可。
优化后的代码示例如下:

def openFile():
    itaFile = filedialog.askopenfilename(
        filetypes=[("ITA Files", ".ITA"), ("All Files", "*")])
    # 用with上下文管理器自动处理文件关闭,避免资源泄漏
    with open(itaFile, "rb+") as itaOpened:
        # 直接移动指针到偏移6的位置(默认从文件开头计算偏移)
        itaOpened.seek(6)
        # 读取1个字节的内容(如果该位置是多字节数值,修改括号内的读取长度即可)
        byte_val = itaOpened.read(1)
        # 转十六进制字符串输出,比如b'\x41'会变成'0x41'
        hex_val = hex(byte_val[0])
        # 转十进制数值直接取byte_val[0]即可
        print(hex_val, byte_val[0])
补充说明
  • 如果需要读取多字节数值,比如2字节无符号小端序数值,可以把read长度改成2,再用int.from_bytes(byte_val, byteorder='little', signed=False)转换即可。
  • 如果需要编辑该位置数值,读取转换修改后,再次seek回到对应偏移,调用write()方法写入转换后的字节即可。

内容的提问来源于stack exchange,提问作者user17038048

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:00