Pandas生成的.tar.gz文件无法解压,求故障原因解析
为什么用Pandas保存的.tar.gz文件无法用tar命令解压?
核心问题是:Pandas的to_csv方法处理.tar.gz后缀时,并没有创建tar归档包,只是做了gzip单文件压缩。
具体原因
当你执行data.to_csv(path+'file.csv.tar.gz', compression='infer')时,compression='infer'会根据文件名后缀判断压缩逻辑:
- 如果后缀是
.gz,会用gzip压缩单个文件 - 但Pandas不支持直接生成tar.gz归档,它只会把csv文件做gzip压缩,然后给文件加上
.tar.gz后缀——本质上这还是一个gzip压缩的单个csv文件,不是包含文件的tar归档包。
你可以用file file.csv.tar.gz命令查看文件类型,会显示类似gzip compressed data,而不是tar archive,这就是tar命令报错的根源——它根本不是tar归档格式。
解决办法
直接解压单个gzip文件
不用tar命令,改用gzip解压:gzip -d file.csv.tar.gz解压后会得到
file.csv文件。生成真正的tar.gz归档(如果需要)
如果确实需要生成包含csv的tar.gz包(比如后续要添加其他文件),可以分两步操作:- 先保存未压缩的csv文件:
data.to_csv(path+'file.csv') - 再用tar命令打包压缩(可以用Python的subprocess调用系统命令):
import subprocess subprocess.run(['tar', '-czvf', path+'file.csv.tar.gz', path+'file.csv'], check=True)
或者用Python内置的
tarfile模块,无需调用系统命令:import tarfile import os temp_csv_path = path+'temp_file.csv' data.to_csv(temp_csv_path) with tarfile.open(path+'file.csv.tar.gz', 'w:gz') as tar: tar.add(temp_csv_path, arcname='file.csv') # arcname指定归档内的文件名 os.remove(temp_csv_path) # 删除临时文件- 先保存未压缩的csv文件:
内容的提问来源于stack exchange,提问作者Dr. Andrew
相关产品推荐
相关产品推荐

