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

将指定文件夹中同日期CSV文件批量压缩为ZIP的问题求助

按日期批量打包CSV文件到ZIP的问题解决

错误原因

你的代码报错核心是路径处理不完整:

  • os.listdir(folder_name)返回的只是文件名,不是完整路径,直接用filename调用zipF.write时,程序会在当前工作目录查找文件,而非你指定的data文件夹,所以找不到目标CSV。
  • ZIP文件的保存路径未指定,默认会生成在当前工作目录,而非data文件夹内,这也会导致后续找不到ZIP文件的问题。

修正后的代码

import os
import zipfile
from datetime import datetime

def zip_csv_files(folder_name, date):
    date_to_string = date.strftime('%Y%m%d')
    # 构建ZIP文件的完整路径,确保生成在目标文件夹内
    zipfile_path = os.path.join(folder_name, f'{date_to_string}_data.zip')
    with zipfile.ZipFile(zipfile_path, 'w') as zipF:
        for filename in os.listdir(folder_name):
            if filename.endswith('.csv') and date_to_string in filename:
                # 构建CSV文件的完整路径
                csv_file_path = os.path.join(folder_name, filename)
                # arcname参数确保ZIP内只保留原文件名,而非完整路径
                zipF.write(csv_file_path, arcname=filename, compress_type=zipfile.ZIP_DEFLATED)
        return zipfile_path

# 调用示例:打包2023年9月14日的文件
target_date = datetime(2023, 9, 14)
zip_csv_files(r'C:\users\data', target_date)

额外优化:自动识别所有日期并打包

如果不想手动传入日期,可以自动遍历所有CSV文件,提取日期并分组打包:

import os
import zipfile
from collections import defaultdict

def auto_zip_by_date(folder_name):
    # 按日期分组存储CSV文件路径
    date_files = defaultdict(list)
    for filename in os.listdir(folder_name):
        if filename.endswith('.csv'):
            # 提取文件名前8位作为日期(假设日期格式是YYYYMMDD)
            date_str = filename[:8]
            if date_str.isdigit() and len(date_str) ==8:
                csv_path = os.path.join(folder_name, filename)
                date_files[date_str].append(csv_path)
    
    # 遍历每个日期分组打包
    for date_str, files in date_files.items():
        zip_path = os.path.join(folder_name, f'{date_str}_data.zip')
        with zipfile.ZipFile(zip_path, 'w') as zipF:
            for file_path in files:
                # 只保留原文件名在ZIP内
                zipF.write(file_path, arcname=os.path.basename(file_path), compress_type=zipfile.ZIP_DEFLATED)
        print(f'已生成ZIP文件:{zip_path}')

# 调用示例
auto_zip_by_date(r'C:\users\data')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:11:00