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

Python如何同时遍历多个年份文件夹 无需硬编码实现文件按月归类

实现方案

不需要硬编码任何年份路径,也不需要重复写遍历逻辑,两种实现方式按需选择即可:

方案1:单次遍历直接完成年/月两级分类(推荐)

不需要先生成年份目录再二次处理月份,遍历根目录文件时直接解析日期的年、月字段,一次性创建两级目录完成归类,逻辑最简洁。

from pathlib import Path
from datetime import datetime

root_dir = Path("/Users/me/Documents/my_data")

# 仅遍历根目录下直接存放的待分类文件
for file in root_dir.iterdir():
    if not file.is_file():
        continue
    # 解析文件名与日期
    suffix = file.suffix
    region, date_part, category = file.stem.split("_")
    file_date = datetime.strptime(date_part, "%Y%m%d")
    year = file_date.strftime("%Y")
    month = file_date.strftime("%m")
    # 生成目标路径 根目录/年份/月份/
    target_folder = root_dir / year / month
    # 自动创建多级不存在的目录,已存在也不会报错
    target_folder.mkdir(parents=True, exist_ok=True)
    # 移动文件到目标路径
    file.replace(target_folder / file.name)

方案2:自动遍历已有年份目录完成月份分类

如果已经把文件归到对应年份文件夹下,不需要手动写死每个年份的路径,直接遍历根目录下所有子文件夹即可自动识别所有年份目录,再逐个处理内部文件的月份归类:

from pathlib import Path
from datetime import datetime

root_dir = Path("/Users/me/Documents/my_data")

# 自动识别根目录下所有子文件夹(即所有年份目录)
for year_folder in root_dir.iterdir():
    if not year_folder.is_dir():
        continue
    # 遍历当前年份目录下的所有文件
    for file in year_folder.iterdir():
        if not file.is_file():
            continue
        # 解析文件名与日期
        region, date_part, category = file.stem.split("_")
        file_date = datetime.strptime(date_part, "%Y%m%d")
        month = file_date.strftime("%m")
        # 生成月份目录路径
        target_folder = year_folder / month
        target_folder.mkdir(parents=True, exist_ok=True)
        # 移动文件
        file.replace(target_folder / file.name)

说明

  • 你原有代码存在几处语法错误:月份格式化字符串缺少闭合引号、newfile/year等变量未定义就调用、月份目录路径拼接错误,上述代码已经全部修正
  • Path.mkdir(parents=True, exist_ok=True) 支持递归创建多级目录,不需要逐层判断目录是否存在
  • 所有年份目录都是自动遍历识别的,后续新增年份不需要修改任何代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:45:15