You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python写入gzip压缩CSV文件时首行出现乱码字符的问题排查

问题分析与解决

错误原因

你的代码里有两个关键问题导致了乱码:

  1. 重复写入gzip头部数据:在TextIOWrapper的with块里调用了gz.write(mem_file.getvalue()),这会把当前mem_file中已经生成的gzip压缩内容(包含gzip的二进制头部)再次写入到gzip对象中。解压时,这部分额外的头部数据会被当作普通文本解析,就出现了首行的乱码字符。
  2. 不必要的手动关闭与指针位置错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:27:38