Python写入gzip压缩CSV文件时首行出现乱码字符的问题排查
问题分析与解决
错误原因
你的代码里有两个关键问题导致了乱码:
- 重复写入gzip头部数据:在
TextIOWrapper的with块里调用了gz.write(mem_file.getvalue()),这会把当前mem_file中已经生成的gzip压缩内容(包含gzip的二进制头部)再次写入到gzip对象中。解压时,这部分额外的头部数据会被当作普通文本解析,就出现了首行的乱码字符。 - 不必要的手动关闭与指针位置错误:
gz.close()是多余的,with语句会自动管理gzip对象的关闭;而且mem_file.seek(0)应该放在所有with块执行完之后,否则指针位置不对。
修正后的代码
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) # 所有写入操作完成后,再将文件指针移到开头 mem_file.seek(0)
验证说明
修正后,gzip文件只会写入正常的CSV文本压缩数据,解压后内容如下:
cara,vera,tara rar,mar,bar jump,lump,dump
首行不会再出现乱码,列数也完全正确。
内容的提问来源于stack exchange,提问作者JennyToy
相关产品推荐
相关产品推荐

