我正在将一些 csv 数据写入 python 中的 csv gzip 文件,如下所示
import csv
import gzip
import io
csv_rows=[["cara","vera","tara"],["rar","mar","bar"],["jump","lump","dump"]]
mem_file = io.BytesIO()
with gzip.GzipFile(fileobj=mem_file,mode="wb") as gz:
with io.TextIOWrapper(gz, encoding='utf-8') as wrapper:
writer = csv.writer(wrapper)
writer.writerows(csv_rows)
gz.write(mem_file.getValue())
gz.close()
mem_file.seek(0)
当我压缩文件时,第一行的第一列是一组奇怪的字符并导致 第一行实际上有 4 列 第2行和第3行都可以
我尝试了不同的数据,并且总是在第一行的第一列中看到这种行为。 代码有什么问题吗?
作为参考,这是我在压缩文件中看到的内容
?‹? #,eÿcara,vera,tara
rar,mar,bar
jump,lump,dump
删除这一行:
gz.write(mem_file.getvalue())
你会发现这一切都很好。 csv模块将写入gzip对象,gzip将写入BytesIO对象。您不需要这个额外的步骤。
删除此行:
gz.write(mem_file.getvalue())
(也是
getvalue()
,而不是getValue()
)。 csv.writer()
已使用 io.TextIOWrapper
写入 gzip.GzipFile
,因此无需再次写入。