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

如何使用Python合并文件夹中上个季度的文件

用Python合并目录中上季度文件的解决方案

一、先搞定「上个季度」的时间筛选

首先得明确哪些文件属于上个季度,分两种场景处理:

1. 根据文件修改时间筛选

用datetime和calendar模块计算上个季度的起止日期,再遍历目录判断文件修改时间是否在范围内:

import os
import datetime
import calendar
import pandas as pd

# 计算上个季度的起止日期
today = datetime.date.today()
current_quarter = (today.month - 1) // 3 + 1
last_quarter = current_quarter - 1 if current_quarter > 1 else 4
last_year = today.year if current_quarter > 1 else today.year - 1

# 确定季度的起始、结束月份
start_month = (last_quarter - 1) * 3 + 1
end_month = last_quarter * 3

# 获取季度第一天和最后一天
start_date = datetime.date(last_year, start_month, 1)
end_date = datetime.date(last_year, end_month, calendar.monthrange(last_year, end_month)[1])

# 遍历目录筛选目标文件
target_files = []
dir_path = "./your_target_dir"  # 替换成你的目标目录路径
for filename in os.listdir(dir_path):
    file_path = os.path.join(dir_path, filename)
    if os.path.isfile(file_path):
        # 把文件修改时间转为date格式
        modify_time = datetime.date.fromtimestamp(os.path.getmtime(file_path))
        if start_date <= modify_time <= end_date:
            target_files.append(file_path)

2. 根据文件名中的季度标识筛选

如果文件名里有Q3_2024、2024Q3这类季度标识,直接匹配筛选:

# 生成上个季度的标识字符串,根据你的文件名格式调整
quarter_tag = f"Q{last_quarter}_{last_year}"
# 也可以改成f"{last_year}Q{last_quarter}",看实际文件名规则
target_files = [
    os.path.join(dir_path, f) 
    for f in os.listdir(dir_path) 
    if os.path.isfile(os.path.join(dir_path, f)) and quarter_tag in f
]

二、用Pandas批量合并文件

筛选出目标文件后,批量读取并合并,同时处理常见格式问题:

# 初始化空的总DataFrame
merged_df = pd.DataFrame()

for file in target_files:
    # 根据文件格式选择读取方法
    if file.endswith(".csv"):
        # 可选:添加on_bad_lines='skip'跳过格式错误的行
        df = pd.read_csv(file, on_bad_lines='skip')
    elif file.endswith((".xlsx", ".xls")):
        df = pd.read_excel(file)
    else:
        print(f"跳过不支持的文件:{file}")
        continue
    
    # 可选:添加来源文件名列,方便后续溯源
    df["source_file"] = os.path.basename(file)
    
    # 合并到总表
    merged_df = pd.concat([merged_df, df], ignore_index=True)

# 保存合并后的结果
merged_df.to_csv("./merged_last_quarter.csv", index=False)
# 如需Excel格式:merged_df.to_excel("./merged_last_quarter.xlsx", index=False)

三、常见问题解决

  • 列名不统一:读取时用usecols指定固定列,或者用df.rename()统一列名后再合并
  • 内存不足:处理大文件时用chunksize分块读取,比如pd.read_csv(file, chunksize=10000),逐块合并
  • 空值异常:读取时添加na_values参数指定空值标识,或者合并后用df.dropna()/df.fillna()处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:34