如何无需解压Zip文件将其中文本文件读取到Pandas DataFrame?
无需解压读取嵌套Zip中多文本文件到Pandas DataFrame
直接用pd.read_csv(zip_path)只适用于Zip包中只有单个顶层文本文件的场景,你的情况是多层嵌套的多个txt文件,得用zipfile模块配合Pandas遍历读取,具体代码如下:
import zipfile import pandas as pd # 定义Zip文件路径和最终导出的CSV路径 zip_path = "zip1.zip" output_csv = "combined_output.csv" # 初始化空列表来存储每个文件的DataFrame df_list = [] # 打开Zip包(无需解压到磁盘) with zipfile.ZipFile(zip_path, 'r') as zf: # 遍历Zip中的所有文件条目 for file_info in zf.infolist(): # 跳过文件夹,只处理.txt文件 if not file_info.is_dir() and file_info.filename.endswith('.txt'): # 打开Zip中的文件对象 with zf.open(file_info.filename) as file: # 读取文本文件为DataFrame,根据实际情况调整sep(分隔符)、encoding等参数 df = pd.read_csv(file, sep=',', encoding='utf-8') # 可选:添加一列记录当前文件的路径,方便溯源 df['source_file'] = file_info.filename # 将当前文件的DataFrame加入列表 df_list.append(df) # 合并所有DataFrame combined_df = pd.concat(df_list, ignore_index=True) # 导出为CSV文件 combined_df.to_csv(output_csv, index=False, encoding='utf-8')
注意事项:
- 若你的txt文件不是逗号分隔,需要修改
pd.read_csv中的sep参数,比如制表符分隔用sep='\t',空格分隔用sep='\s+'。 - 如果存在中文乱码问题,可尝试替换
encoding参数为'gbk'或'utf-8-sig'。 - 如果不同txt文件的列结构不一致,
pd.concat会自动补全缺失值为NaN,可根据需求提前统一列名或筛选特定列。
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

