Python使用zipfile压缩CSV文件时如何避免列合并?
解决CSV压缩后列合并的问题
嘿,我一眼就瞅出问题所在了——你现在生成的根本不是标准的CSV文件!
你用了data_1.to_string(index=False, header=True)这个方法,它会把DataFrame转换成空格分隔的纯文本,而非CSV格式要求的逗号分隔内容。所以当你把这个文本存成.csv后缀的文件时,解压后打开,CSV阅读器(比如Excel)会默认按逗号分割列,但你的内容全是空格分开的,自然就会把所有列合并成一列了。
修正方案:用to_csv()生成标准CSV内容
直接把to_string()换成Pandas专门用来生成CSV的to_csv()方法,就能生成符合规范的逗号分隔内容,完美解决列合并问题。这里给你调整后的代码:
import zipfile for i in dealers: data_1 = data_dealer[data_dealer['DEALER_ID'] == i] # 生成标准CSV格式的字节内容,保留表头、去掉行索引,处理UTF-8 BOM避免乱码 csv_content = data_1.to_csv(index=False, header=True).encode("utf_8_sig") # 注意:原代码里的Zipfile是拼写错误,正确的类名是ZipFile(大写F) with zipfile.ZipFile(f'data{i}.zip', mode='w') as azip: azip.writestr(f'data{i}.csv', data=csv_content, compress_type=zipfile.ZIP_DEFLATED)
几个关键细节说明
- 替换
to_string为to_csv:这是核心,to_csv()会自动用逗号分隔列,生成标准CSV格式,确保解压后列能正常识别。 - 修复
Zipfile拼写错误:Python的zipfile模块中的类是ZipFile(首字母大写F),原代码的写法会抛出AttributeError,必须纠正。 - 用
with语句管理zip文件:这样不需要手动调用close(),代码更简洁,还能避免因异常导致文件未关闭的问题。 - 保留
utf_8_sig编码:和你原来的需求一致,确保生成的CSV文件在Windows系统下打开不会出现中文乱码。
这样修改后,你压缩的CSV文件解压后列就会正常分隔啦!
内容的提问来源于stack exchange,提问作者Deanna
相关产品推荐
相关产品推荐

