如何使用Python按日期列值批量移动多个CSV文件到对应月份文件夹
问题原因
你通过df.iloc[0]['Date']获取到的日期值为pandas Timestamp或datetime类型,不属于字符串类型,因此无法直接调用字符串专属的endswith、contains等方法。
完整实现方案
1. 导入依赖库
import os import shutil import pandas as pd from pathlib import Path
2. 配置路径参数
修改下方路径为你自己的本地路径即可:
# 未分类CSV存放的父文件夹路径 UNCLASSIFIED_FOLDER = Path("/替换为你的未分类文件夹路径") # 分类后月份文件夹的根存放路径 CLASSIFIED_ROOT = Path("/替换为你的分类根路径")
3. 批量处理逻辑
以下代码会自动遍历所有CSV、读取日期、生成对应月份文件夹、移动文件,同时针对大文件做了读取优化:
for csv_path in UNCLASSIFIED_FOLDER.glob("*.csv"): # 仅读取第一行数据,无需加载整个文件,大幅提升数千个文件的处理速度 single_row_df = pd.read_csv(csv_path, nrows=1) # 统一转成Timestamp格式,自动兼容绝大多数日期写法 date_value = pd.to_datetime(single_row_df.iloc[0]["Date"]) # 生成月份目录名,格式示例:2024-05 month_folder = f"{date_value.year}-{date_value.month:02d}" target_path = CLASSIFIED_ROOT / month_folder # 自动创建不存在的目录 target_path.mkdir(parents=True, exist_ok=True) # 移动文件,若需要保留原文件仅复制,替换为 shutil.copy2 shutil.move(str(csv_path), str(target_path / csv_path.name))
补充说明
- 如果你确实需要使用字符串匹配方法,只需将拿到的日期值转成字符串即可:
date_str = str(date_value),之后即可正常调用date_str.endswith()等字符串方法,判断子串也可以直接用"xxx" in date_str代替contains方法 - 若你的日期列名不是
Date,修改代码中对应列名即可
内容的提问来源于stack exchange,提问作者Silverback W
相关产品推荐
相关产品推荐

