如何编写循环批量转换目录下的csv.gz文件为csv文件?
批量转换csv.gz文件为csv文件的解决方案
原代码的问题点
- 循环逻辑错误:用
range(len(all_filenames))拿到的是文件索引,不是实际文件名,导致gzip.open(i)会报错找不到文件 - 语法错误:
for循环后缺少with关键字,且缩进不规范 - 遗漏关键步骤:只读取了压缩文件,没有执行保存为csv的操作
- 缺失依赖导入:代码中使用了
pd.read_csv但没导入pandas库
修正后的完整代码
import gzip import glob import os import pandas as pd # 必须导入pandas,否则pd会未定义 # 切换到目标目录 os.chdir('/home/path') # 获取所有csv.gz格式的文件 all_gz_files = glob.glob('*.csv.gz') # 遍历每个压缩文件 for gz_file in all_gz_files: # 生成对应的csv文件名:去掉末尾的.gz后缀 csv_file = gz_file[:-3] # 读取压缩文件并保存为csv with gzip.open(gz_file, 'rt') as f: df = pd.read_csv(f) df.to_csv(csv_file, index=False) # index=False避免额外生成索引列 print(f"转换完成:{gz_file} → {csv_file}")
关键说明
- 直接遍历文件名列表,不用索引,逻辑更清晰
- 使用
with语句自动管理文件资源,避免手动关闭文件的麻烦 - 读取压缩文件时指定
'rt'模式(文本模式),确保pandas能正确解析内容 index=False参数可以防止把DataFrame的行索引写入csv,保持原文件的结构一致- 新增打印语句,方便查看每个文件的转换状态
内容的提问来源于stack exchange,提问作者11372386
相关产品推荐
相关产品推荐

