在Python中简单编辑二进制文件

12 投票
6 回答
26534 浏览
提问于 2025-04-16 09:25

这应该很简单! 但是我一直找不到这个问题的答案。

我想用Python把一个二进制文件读到内存中,修改文件的前四个字节,然后再把文件写回去。

总得有个简单的方法来编辑这四个小字节吧?对吧?

6 个回答

2
C:\junk>copy con qwerty.txt
qwertyuiop
^Z
        1 file(s) copied.

C:\junk>\python27\python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('qwerty.txt', 'r+b')
>>> f.write('asdf')
>>> f.close()
>>> open('qwerty.txt', 'rb').read()
'asdftyuiop\r\n'
>>>

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

6

这段代码的意思是……

首先,它会做一些检查,确保输入的内容是正确的。接着,它会根据这些输入来执行特定的操作。最后,代码会返回一个结果,告诉你操作的结果是什么。

如果你想了解每一行代码的具体作用,可以逐行分析,看看每个部分是如何工作的。这样可以帮助你更好地理解整个程序的流程。

总之,这段代码是为了处理某些数据,并给出相应的反馈。

with open(filename, 'r+b') as f:
  bytes = f.read(4)
  newbytes = 'demo'
  f.seek(0)
  f.write(newbytes)
17

为什么要把整个文件都读一遍才能修改开头的四个字节呢?这样做不应该可以吗?

with open("filename.txt", "r+b") as f:
     f.write(chr(10) + chr(20) + chr(30) + chr(40))

即使你需要从文件中读取这些字节来计算新的值,你仍然可以这样做:

with open("filename.txt", "r+b") as f:
    fourbytes = [ord(b) for b in f.read(4)]
    fourbytes[0] = fourbytes[1]  # whatever, manipulate your bytes here
    f.seek(0)
    f.write("".join(chr(b) for b in fourbytes))

撰写回答