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

使用Python批量提取Zip包内CSV信息并生成可检索目录

问题解决:遍历Zip生成关联目录(Excel输出)

问题场景

我有一个包含3000多个Zip文件夹的目录,每个Zip内有1-4个CSV文件:

  • Zip文件夹命名格式:CSV_2023_Q2_XXXXXXX_XXXXXXX.ZIP
  • CSV文件前缀:202306_COMPANY_NAME_LLC...,后缀包含_ident.CSV、_contracts.CSV、_indexPub.CSV、_transactions.CSV,且每个Zip至少包含_ident.csv(大小写可能不一致)
  • 需求:遍历所有Zip,生成关联Zip名称与CSV中公司名称的可检索目录,优先输出为Excel文件

原代码问题分析

你提供的代码生成的CSV只有表头无数据,核心原因有两个:

  1. 大小写不匹配:代码中判断file.endswith("_ident.csv"),但实际CSV文件后缀可能是大写.CSV,导致找不到目标文件,ident_file始终为None,无法添加数据到列表
  2. 公司名提取逻辑不准确:原代码仅截取_ident.csv前的全部内容,包含了日期前缀(如202306_),不符合提取公司名称的需求

修复后的代码

以下是修正后的代码,同时满足Excel输出的需求:

import os
import zipfile
import pandas as pd

# 替换为你的目标目录路径
main_folder = "你的Zip文件夹根目录路径"
folder_file_info = []

# 遍历目录下所有文件
for root, dirs, files in os.walk(main_folder):
    for zip_filename in files:
        # 筛选Zip文件(忽略大小写)
        if zip_filename.startswith("CSV_") and zip_filename.lower().endswith(".zip"):
            zip_path = os.path.join(root, zip_filename)
            
            # 读取Zip内的文件列表
            with zipfile.ZipFile(zip_path, "r") as zip_ref:
                zip_file_list = zip_ref.namelist()
            
            # 查找_ident文件(忽略大小写)
            ident_file = next(
                (file for file in zip_file_list if file.lower().endswith("_ident.csv")),
                None
            )
            
            if ident_file:
                # 提取公司名称:先去掉_ident.csv后缀,再移除日期前缀(如202306_)
                name_part = ident_file.rsplit("_ident.csv", 1)[0].lower()
                # 分割日期前缀和公司名部分
                if "_" in name_part:
                    company_name = name_part.split("_", 1)[1].upper()  # 转回大写保持格式统一
                else:
                    company_name = name_part.upper()
                
                # 添加到结果列表
                folder_file_info.append({
                    "Zip文件夹名称": zip_filename,
                    "公司名称": company_name
                })

# 输出为Excel文件(优先)
excel_path = "Zip与公司名关联目录.xlsx"
df = pd.DataFrame(folder_file_info)
df.to_excel(excel_path, index=False, encoding="utf-8")

# 可选:同时输出CSV文件
csv_path = "Zip与公司名关联目录.csv"
df.to_csv(csv_path, index=False, encoding="utf-8")

print(f"文件已生成:\nExcel路径:{excel_path}\nCSV路径:{csv_path}")

代码说明

  • 大小写兼容:通过lower()统一转换为小写判断,避免因文件名大小写差异导致的匹配失败
  • 准确提取公司名:先移除_ident.csv后缀,再分割掉日期前缀(如202306_),仅保留公司名称部分
  • Excel输出:使用pandas直接生成Excel文件,满足优先需求,同时保留CSV输出选项
  • 鲁棒性:添加了对日期前缀分割的容错处理,避免异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:35