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

能否用Python在二进制文件中注入并移动数据?指定位置注入实操问询

用Python在二进制文件中注入并移动数据的实现方法

当然可以实现,不过二进制文件本身没有原生的“插入”功能,要在已有数据中间注入新内容,需要先把插入位置之后的数据临时保存,写入新数据后再把原后续数据追加回去;或者直接将整个文件读入内存修改后重新写入(适合小文件)。

针对你的场景,原文件通过追加模式写入了b'A'和b'C',最终文件内容是b'AC',要在A(位置0)和C(位置1)之间注入b'B',让f.seek(1)能读取到B,可以用以下两种方法:

方法1:全文件读入内存修改(适合小文件)

这种方法简单直接,把整个文件内容读入内存,在指定位置插入数据后重新写入文件:

# 读取原文件内容
with open("inject.bin", "rb") as f:
    content = f.read()

# 在索引1的位置插入B(原C的位置)
new_content = content[:1] + b'B' + content[1:]

# 将修改后的内容写回文件
with open("inject.bin", "wb") as f:
    f.write(new_content)

# 验证效果
with open("inject.bin", "rb") as f:
    f.seek(1)
    print(f.read(1))  # 输出 b'B'

方法2:局部读写(适合大文件)

如果文件很大,不适合全读入内存,可以通过定位读写,先保存插入位置后的内容,再写入新数据和原后续内容:

insert_position = 1
insert_data = b'B'

with open("inject.bin", "rb+") as f:
    # 移动到插入位置,读取后面的所有数据
    f.seek(insert_position)
    remaining_data = f.read()
    
    # 回到插入位置,写入要注入的B
    f.seek(insert_position)
    f.write(insert_data)
    
    # 写入之前保存的后续数据(原C)
    f.write(remaining_data)

# 验证效果
with open("inject.bin", "rb") as f:
    f.seek(1)
    print(f.read(1))  # 输出 b'B'

注意事项

  • 不要用ab模式做修改,ab模式始终在文件末尾追加内容,无法定位到中间位置写入。
  • 使用rb+模式时,它支持读写操作且不会截断原文件,适合做局部修改;wb模式会清空原文件,只适合全量覆盖写入。

内容的提问来源于stack exchange,提问作者Bob van Luijt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:40:18