在带有“类文件”对象的 Python 2.x 中:
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 毫无意义。
最佳答案
这是使用对字节而不是字符串进行操作的 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。关于python - 如何在不知道编码的情况下将字节写入 Python 3 中的文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4290716/