我正在尝试将一些代码从Python 2.7迁移到Python 3。2to3工具可以很好地处理基本语法和包更改,但现在我们遇到了一些奇怪的副作用。
我有以下代码块。它使用gzip模块打开一个临时文件名。
f = NamedTemporaryFile(delete=False)
f.close()
fn = f.name + '.gz'
os.rename(f.name, fn)
fz = gzip.open(fn, 'wb')
writer = csv.writer(fz, delimiter='\t', lineterminator=lt)
for row in table:
writer.writerow(row)
fz.close()
问题在于执行此操作会报以下错误:
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/gzip.py", line 343, in write
self.crc = zlib.crc32(data, self.crc) & 0xffffffff
TypeError: 'str' does not support the buffer interface
我已尝试将gzip文件以“w”而非“wb”的方式打开,但没有成功。我猜测gzip模块期望一个字节数组,但CSV Writer不会提供除字符串外的其他内容。
人们如何在Python 3中实现这个呢?
编辑:我应该提到,这个代码块在Python 2.7中可以顺利执行。
wt
,而不是wb
。 - Mazdakwriter.writerows(table)
,而无需自己迭代其他table
。 - VMAtm