在Python 2.x中使用'file-like'对象:
sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)
如何在Python 3中做同样的事情?
如何编写此Python 2.x代码的等效代码:
def write(file_, bytes_):
file_.write(bytes_)
注意:sys.stdout
在语义上并不总是文本流。有时将它视为字节流可能是有益的。例如,make encrypted archive of dir/ on remote machine:
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
在这种情况下没有必要使用Unicode。
答案 0 :(得分:51)
这是使用以字节而不是字符串操作的API的问题。
sys.stdout.buffer.write(bytes_)
正如docs解释的那样,您还可以detach
这些流,因此默认情况下它们是二进制的。
这将访问基础字节缓冲区。
tempfile.TemporaryFile().write(bytes_)
这已经是一个字节API。
open('filename', 'wb').write(bytes_)
正如您对'b'所期望的那样,这是一个字节API。
from io import BytesIO
BytesIO().write(bytes_)
BytesIO
是等同于StringIO
的字节。
编辑:write
将在任何二进制文件类对象上工作。所以一般的解决方案就是找到合适的API。
答案 1 :(得分:16)