我将一些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)
字符串
当我gunzip文件的第一列在第一行是一个奇怪的字符集,并导致第一行实际上有4列第2和第3行是好的
我尝试了不同的数据,总是在第一行的第一列看到这种行为。代码有什么问题?
作为参考,这里是我在gunzipped文件中看到的
?‹? #,eÿcara,vera,tara
rar,mar,bar
jump,lump,dump
型
2条答案
按热度按时间bqf10yzr1#
删除此行:
字符串
(also它是
getvalue()
,而不是getValue()
)。csv.writer()
已经使用io.TextIOWrapper
写入gzip.GzipFile
,所以没有必要再次写入。njthzxwz2#
删除此行:
字符串
你会发现这一切都很好。csv模块将写入gzip对象,gzip将写入BytesIO对象。你不需要这个额外的步骤。