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

Python 2.7二进制文件字符串定位及指定偏移至EOF数据提取问题

解决Python 2.7二进制文件查找字符串及后续写入问题

首先,你遇到的AttributeError是因为文件对象本身没有index()方法——这个方法是字符串(在Python 2.7中,二进制文件读取后得到的str本质就是字节串)的方法,你需要先把文件内容读取到内存中,再对读取后的字节串调用index()。

接下来我会给你修正后的完整代码,同时实现你需要的「找到字符串后回退10字节,保存剩余内容」的需求:

import sys

def process_binary_file(file_path, target_str):
    # 打开二进制文件并读取全部内容,with语句会自动管理文件关闭
    with open(file_path, mode='rb') as f:
        buff = f.read()
    
    try:
        # 在读取到的字节串中查找目标字符串的偏移位置
        target_pos = buff.index(target_str)
        print(f"找到字符串'{target_str}'的偏移量: {target_pos}")
        
        # 计算回退10字节后的起始位置,加max处理边界(避免出现负数索引)
        start_pos = max(target_pos - 10, 0)
        
        # 将回退后到文件末尾的内容写入新文件,文件名可按需修改
        with open('output.bin', 'wb') as out_f:
            out_f.write(buff[start_pos:])
        print(f"已成功将从偏移量{start_pos}到EOF的内容写入output.bin")
        
    except ValueError:
        # 捕获目标字符串不存在的情况
        print(f"错误:文件中未找到字符串'{target_str}'")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python script.py <二进制文件路径>")
        sys.exit(1)
    # 替换成你实际要查找的字符串,比如"document"
    target = "apple"
    process_binary_file(sys.argv[1], target)

关键细节说明:

  • 用with open(...)操作文件:这是Python推荐的规范写法,无需手动调用close(),能避免因疏忽导致的文件资源泄漏。
  • 边界防护max(target_pos -10, 0):防止目标字符串的位置太靠前(小于10字节),回退后出现负数索引的问题,这种情况下就从文件起始位置开始写入。
  • 异常捕获:如果目标字符串不存在于文件中,index()会抛出ValueError,我们捕获后给出清晰提示,避免程序崩溃。
  • 二进制模式一致性:始终用rb读、wb写,确保二进制数据不会被错误编码或转换。

如果你要查找的是"document"这类其他字符串,只需要修改代码里的target变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:09:05