Python如何批量提取并处理不同路径压缩包内的多个Excel文件
解决方案
实现思路
- 自动生成指定日期范围的所有日期字符串,不需要手动逐个填写路径
- 直接读取压缩包内的Excel文件,无需提前手动解压到本地磁盘
- 循环遍历所有路径,对每个Excel执行自定义处理后暂存结果,最后统一合并
依赖库安装
如果还没安装对应依赖,执行以下命令:pip install pandas openpyxl zipfile36
完整实现代码
import glob import pandas as pd import zipfile from datetime import datetime, timedelta # 自定义单个Excel文件的处理函数,把你自己的运算逻辑写在这个函数内即可 def process_single_excel(excel_content, file_name, date_str): # 示例:读取Excel第一个sheet,可根据需求调整sheet名称、读取参数 df = pd.read_excel(excel_content, engine='openpyxl') # ----- 以下替换为你自己的处理逻辑 ----- # 示例:新增日期列标识数据所属日期 df['data_date'] = date_str # 示例:新增文件名列标识数据来源文件 df['source_file'] = file_name # ----- 以上替换为你自己的处理逻辑 ----- return df if __name__ == '__main__': # 基础配置,根据你自己的实际路径、参数修改 base_dir = 'C:/Users/Dell/Downloads/month' start_date = datetime(2021,6,1) end_date = datetime(2021,6,30) # 需要处理的日期文件夹下的子目录,如果你还要处理BB、CC目录直接加到列表中即可 sub_dirs = ['AA'] # 存储所有处理后的结果 all_result = [] # 遍历日期范围内的所有日期 current_date = start_date while current_date <= end_date: date_str = current_date.strftime('%Y-%m-%d') # 遍历需要处理的子目录 for sub_dir in sub_dirs: zip_path = f"{base_dir}/{date_str}/{sub_dir}/file.zip" # 路径不存在时跳过避免报错 if not glob.os.path.exists(zip_path): print(f"路径不存在,已跳过:{zip_path}") continue # 直接读取压缩包内的文件,无需解压到本地 with zipfile.ZipFile(zip_path, 'r') as zip_ref: # 遍历压缩包内所有xlsx文件 for file in zip_ref.namelist(): if file.endswith('.xlsx') and not file.startswith('__MACOSX'): with zip_ref.open(file) as f: processed_df = process_single_excel(f, file, date_str) all_result.append(processed_df) current_date += timedelta(days=1) # 合并所有处理后的结果 final_df = pd.concat(all_result, ignore_index=True) # 导出最终合并文件,可修改为csv格式输出 final_df.to_excel('合并结果.xlsx', index=False) print("全流程处理完成,合并文件已生成")
补充说明
- 不需要单独生成
file1到file30的变量,所有处理后的结果会直接存入all_result列表,最后统一合并,逻辑更简洁 - 如果你需要保留解压后的文件到本地,可以在读取压缩包的部分增加
zip_ref.extractall(解压路径)的代码 - 如果你的压缩包命名不是固定的
file.zip,可以把路径匹配逻辑改成glob.glob(f"{base_dir}/{date_str}/{sub_dir}/*.zip")遍历子目录下所有zip文件
内容的提问来源于stack exchange,提问作者Jewel_R
相关产品推荐
相关产品推荐

