在Python 2中.带有"类似文件"对象的x:

sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)

在Python3中如何做到这一点?

如何编写与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只适用于任何binary类文件对象.所以一般的解决方案就是找到合适的API.

Python-3.x相关问答推荐

为什么在Python中使用RANDINT函数时会出现此TypeError?

PYSMB中的进度条

没有这样的命令';角色';-可靠分子

使用 Fetch 提交表单到 Django 视图

Django 模型类方法使用错误的 `self`

将自定义函数应用于 pandas 数据框的每一列

我应该如何调整我的变量,以便如果有任何单词符合其中的条件,程序会将其附加到新列表中?

Python3:是否可以将变量用作函数调用的一部分

!date 的命令无法从 jupyter notebook 运行

将两列合并为一列,将它们制成字典 - pandas - groupby

通过点和线计算CV2 Homography

使用 from re findall 组合连续匹配并分离非连续匹配

合并两个numpy数组

PyQt:退出时没有错误消息(回溯)

如何使用python将放置在多个嵌套文件夹中的文档移动和重命名为一个新的单个文件夹?

导入 python 模块而不实际执行它

用 numpy nan 查找列表的最大值

如何区分文件之类的对象和文件路径之类的对象

try 在 Mac OS 中运行此命令pipenv install requests时出错

如何判断列表中的所有项目是否都是字符串