如何在Python中将二进制和ASCII数据写入文件?
我正在实现一个有些复杂的协议,需要把二进制数据和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数据和二进制数据有什么不同。