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
相关产品推荐
相关产品推荐

