我正在尝试将一些代码从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()
Run Code Online (Sandbox Code Playgroud)
问题是执行此操作会给我以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我试过打开gzip文件为'w'而不是'wb',但无济于事.我猜测gzip模块需要一个字节数组,但CSV Writer不会或不会提供除字符串以外的任何内容.
人们如何在Python 3中做到这一点?
编辑:我应该提到这个代码块在Python 2.7中没有问题.