如何在Python中将二进制和ASCII数据写入文件?

1 投票
2 回答
937 浏览
提问于 2025-04-18 07:11

我正在实现一个有些复杂的协议,需要把二进制数据和ASCII数据写到同一个文件里。我想知道怎么才能同时做到这一点,或者至少最后的结果是一个包含混合ASCII和二进制数据的文件?

我知道用 open("myfile", "rb") 可以以二进制模式打开文件,但我找不到解决这个问题的方法!

2 个回答

1

你写入文件的内容其实是“字节”。在Python 2和3中(在Python 2里是str,而在Python 3里为了更清楚明了,我们把它改成了bytes)。

所以:

with open("file.ext", "w") as f:
    f.write(b"some bytes")

举个例子:

bash-4.3$ python
Python 2.7.6 (default, Apr 28 2014, 00:50:45) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> with open("file.ext", "w") as f:
...     f.write(b"some bytes")
... 
>>> 
bash-4.3$ cat file.ext
some bytesbash-4.3$ 

通常,当你处理Unicode字符串时(在Python 3中是str,在Python 2中是unicode),你会使用编码。例如:

s = "Hello World!"

with open("file.ext", "w") as f:
    f.write(s.encode("utf-8"))

注意:正如评论中提到的;open(filename, "wb")并不是你想的那样,它只是影响了换行符的处理方式。

2

在Python 2中,唯一的区别是二进制模式在写入时如何处理换行符;\n会被转换成适合你操作系统的换行符。

换句话说,你可以直接把你的ASCII字节串写入二进制文件,Python并不觉得你的ASCII数据和二进制数据有什么不同。

撰写回答