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
相关产品推荐
相关产品推荐

