如何读取zip压缩包内多层子文件夹下所有CSV文件并拼接合并
原代码失效原因
glob仅支持扫描本地磁盘的文件路径,无法直接遍历zip压缩包的内部结构,将ZipFile对象直接与字符串拼接的写法无实际作用- 原通配符
/*.csv仅匹配压缩包根目录下的csv文件,不会递归遍历所有子文件夹,且pd.read_csv默认无法直接读取未解压压缩包内的嵌套文件
可直接运行的实现方案
无需提前解压压缩包,直接在内存中完成所有文件读取与拼接,节省磁盘空间:
import zipfile import pandas as pd from io import BytesIO df_list = [] with zipfile.ZipFile('/zip_file.zip', 'r') as zf: # 遍历压缩包内所有条目 for entry in zf.infolist(): # 跳过目录,仅处理csv格式文件 if entry.filename.endswith('.csv') and not entry.is_dir(): # 读取文件内容到内存 file_content = zf.read(entry.filename) df = pd.read_csv(BytesIO(file_content), index_col=None, header=0) df_list.append(df) # 纵向拼接所有数据表 final_frame = pd.concat(df_list, axis=0, ignore_index=True)
可选优化提示
- 若csv文件存在编码问题(如中文乱码),可在
pd.read_csv中传入对应编码参数,例如encoding='gbk'、encoding='utf-8-sig' - 若压缩包内文件总大小超出内存上限,可在读取每个csv时仅保留需要的字段,减少内存占用
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

