在带有“类文件”对象的 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/

10-16 17:35