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

如何使用Python从每日压缩Zip文件夹提取并重命名指定文件?

解决方案与学习指南

一、需求梳理

  • 每日收到命名格式为v1_csv_2022_06_02_2023_etc.zip的压缩包,需从内部export子文件夹中提取含sales、activity等指定关键词的4个CSV文件
  • 解决同名文件覆盖问题:将压缩包中的日期(如2022_06_02)添加到提取的CSV文件名前;最终合并所有sales类文件为一个主CSV文件

文件夹结构:

Users --> username --> documents --> sales & activities --> 带日期命名的每日Zip文件夹 --> export文件夹 --> 30+ CSV文件

二、改进后的代码实现

之前的代码会提取所有文件且未正确提取日期,下面是匹配需求的完整代码:

import os
import zipfile
import pandas as pd

# 配置参数,根据你的实际情况修改
ZIP_DIR = "/Users/username/documents/sales & activities"  # 存放每日zip包的文件夹路径
TARGET_KEYWORDS = ["sales", "activity"]  # 需要提取的CSV文件名关键词
OUTPUT_DIR = os.path.join(ZIP_DIR, "processed_files")  # 处理后文件的存放目录
MERGED_SALES_PATH = os.path.join(ZIP_DIR, "merged_sales.csv")  # 合并后的主sales文件路径

# 创建输出目录,不存在则自动创建
os.makedirs(OUTPUT_DIR, exist_ok=True)

# 遍历目录下所有zip文件
for zip_filename in os.listdir(ZIP_DIR):
    # 跳过非zip文件
    if not zip_filename.endswith(".zip"):
        continue
    
    # 从zip文件名中提取日期部分(拆分后取第3-5段,对应YYYY_MM_DD)
    date_segments = zip_filename.split("_")[2:5]
    date_str = "_".join(date_segments)
    
    zip_full_path = os.path.join(ZIP_DIR, zip_filename)
    
    # 打开zip包,选择性提取文件
    with zipfile.ZipFile(zip_full_path, "r") as zip_ref:
        # 遍历zip内的所有文件路径
        for file_path_in_zip in zip_ref.namelist():
            # 只处理export文件夹下的CSV文件,且文件名包含目标关键词
            if file_path_in_zip.startswith("export/") and file_path_in_zip.endswith(".csv"):
                filename = os.path.basename(file_path_in_zip)
                if any(keyword in filename for keyword in TARGET_KEYWORDS):
                    # 提取文件到输出目录
                    temp_extract_path = zip_ref.extract(file_path_in_zip, OUTPUT_DIR)
                    # 重命名文件,添加日期前缀
                    new_filename = f"{date_str}_{filename}"
                    new_file_path = os.path.join(OUTPUT_DIR, new_filename)
                    os.rename(temp_extract_path, new_file_path)

# 合并所有sales相关文件
sales_file_list = [f for f in os.listdir(OUTPUT_DIR) if "sales" in f and f.endswith(".csv")]
data_frames = []
for sales_file in sales_file_list:
    full_file_path = os.path.join(OUTPUT_DIR, sales_file)
    # 读取CSV文件
    df = pd.read_csv(full_file_path)
    # 添加来源日期列,方便后续溯源
    df["source_date"] = "_".join(sales_file.split("_")[0:3])
    data_frames.append(df)

# 将所有sales数据合并并保存
if data_frames:
    merged_sales_df = pd.concat(data_frames, ignore_index=True)
    merged_sales_df.to_csv(MERGED_SALES_PATH, index=False)
    print(f"合并完成!主sales文件已保存到:{MERGED_SALES_PATH}")
else:
    print("未找到任何需要合并的sales文件")

代码关键说明

  • 参数配置:开头的变量都可以根据你的实际路径/需求修改,不用改动核心逻辑
  • 日期提取:通过拆分zip文件名精准拿到日期部分,避免用整个zip名导致文件名过长
  • 选择性提取:只处理符合条件的文件,减少不必要的磁盘占用
  • 重命名规则:日期前缀确保同名文件不会覆盖,保留每日数据
  • 合并逻辑:用Pandas合并数据,同时添加来源日期列,方便后续数据溯源

三、学习资源推荐

  • Python基础:先掌握变量、循环、条件判断、文件操作,重点学os模块的路径处理方法,这是批量操作文件的基础
  • zipfile模块:查阅Python官方文档的zipfile章节,学习如何遍历压缩包内的文件、选择性提取内容
  • Pandas数据处理:重点学习read_csv、concat、to_csv这几个方法,掌握CSV文件的读取、合并、保存,这是处理这类数据需求的核心工具
  • 实战练习:从简单的文件重命名、单个压缩包提取开始练,逐步过渡到批量处理、数据合并,积累实际操作经验

内容的提问来源于stack exchange,提问作者lunaliz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:13:24