【发布时间】:2016-12-02 00:31:15
【问题描述】:
我想写一个文件。根据文件的名称,这可能会或可能不会使用gzip 模块进行压缩。这是我的代码:
import gzip
filename = 'output.gz'
opener = gzip.open if filename.endswith('.gz') else open
with opener(filename, 'wb') as fd:
print('blah blah blah'.encode(), file=fd)
我正在以二进制模式打开可写文件并对要写入的字符串进行编码。但是我收到以下错误:
File "/usr/lib/python3.5/gzip.py", line 258, in write
data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'
为什么我的对象不是字节?如果我用'w' 打开文件并跳过编码步骤,我会得到同样的错误。如果我从文件名中删除 '.gz',我也会得到同样的错误。
我在 Ubuntu 16.04 上使用 Python3.5
【问题讨论】:
-
同
print(str('blah blah blah'.encode()), file=fd)。 python 正在尝试编写字节对象的字符串表示形式。 -
@nic 您可以使用 'wt' 标志并直接写入字符串 - 请参阅下面的答案
标签: python gzip typeerror python-3.5