You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:54:00