5.17 将字节写入文本文件¶

问题¶

你想在文本模�打开的文件中写入原始的字节数�。

解决方案¶

将字节数�直接写入文件的缓冲区��,例如:

>>> import sys
>>> sys.stdout.write(b'Hello\n')
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: must be str, not bytes
>>> sys.stdout.buffer.write(b'Hello\n')
Hello
5
>>>

类似的,能够通过读�文本文件的 buffer 属性�读�二进制数�。

讨论¶

I/O系统以层级结构的形�构建而�。 文本文件是通过在一个拥有缓冲的二进制模�文件上增加一个Unicode编�/解�层�创建。 buffer 属性指�对应的底层文件。如果你直接访问它的�就会绕过文本编�/解�层。

本�节例�展示的 sys.stdout �能看起�有点特殊。 默认情况下,sys.stdout 总是以文本模�打开的。 但是如果你在写一个需�打�二进制数�到标准输出的脚本的�,你�以使用上�演示的技术�绕过文本编�层。