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

如何使用pandas遍历子文件夹并按文件名规则分类移动文件

实现思路

这个需求的核心是目录递归遍历、文件名规则匹配、批量文件移动,纯文件分类移动不需要复杂的pandas数据处理逻辑,搭配Python原生的os、shutil库即可完成,整体流程拆分为4步:

  • 提前创建两类文件对应的目标存储文件夹,避免移动时因路径不存在抛出错误
  • 递归遍历根目录下所有层级的子文件夹,过滤出后缀为.csv的目标文件,跳过其他格式内容
  • 提取每个csv文件的文件名首字符,判断属于数字开头还是非数字(字符串)开头
  • 执行文件移动操作,内置重名文件自动加后缀的逻辑,避免同名文件被覆盖

注:csv是逗号分隔的纯文本格式,和xlsx/xls格式的二进制Excel文件有区别,下方代码默认处理.csv后缀文件,如果需要处理Excel文件,只需修改后缀判断的条件即可。

参考代码

代码里的路径配置项直接替换成你本地的实际路径就能运行,每一步都加了注释,适合初学者对照修改:

import os
import shutil
import pandas as pd

# -------------------------- 路径配置区 按需修改 --------------------------
ROOT_FOLDER = r"替换成你的根文件夹绝对路径"  # Windows路径示例:r"C:\Docs\csv_source"
TARGET_STR_START = r"替换成字符串开头文件的目标存储路径" # 示例:r"C:\Docs\res\str_csv"
TARGET_NUM_START = r"替换成数字开头文件的目标存储路径" # 示例:r"C:\Docs\res\num_csv"
# ------------------------------------------------------------------------

# 初始化创建目标文件夹,文件夹已存在时不会重复创建报错
os.makedirs(TARGET_STR_START, exist_ok=True)
os.makedirs(TARGET_NUM_START, exist_ok=True)

# 递归遍历根目录下所有层级的文件和文件夹
for current_dir, _, file_list in os.walk(ROOT_FOLDER):
    # 跳过目标存储文件夹本身,避免重复扫描已经移动完成的文件
    if current_dir in [TARGET_STR_START, TARGET_NUM_START]:
        continue
    for file_name in file_list:
        # 过滤非csv文件,要处理xlsx就把".csv"改成".xlsx"
        if not file_name.lower().endswith(".csv"):
            continue
        # 拼接文件的原始完整路径
        old_full_path = os.path.join(current_dir, file_name)
        first_char = file_name[0]
        # 匹配对应目标路径
        if first_char.isdigit():
            target_root = TARGET_NUM_START
        else:
            target_root = TARGET_STR_START
        target_full_path = os.path.join(target_root, file_name)

        # 重名处理:目标路径存在同名文件时自动追加(1)(2)序号后缀
        suffix_counter = 1
        while os.path.exists(target_full_path):
            name, ext = os.path.splitext(file_name)
            target_full_path = os.path.join(target_root, f"{name}({suffix_counter}){ext}")
            suffix_counter += 1
        
        # 执行移动操作
        shutil.move(old_full_path, target_full_path)
        print(f"移动完成:{old_full_path} -> {target_full_path}")

print("所有文件分类移动执行完毕")
使用注意事项
  • 首次运行前务必备份一份原始文件,避免路径配置错误导致文件丢失
  • Windows路径前面加r是为了屏蔽反斜杠的转义作用,Mac/Linux路径直接写正常字符串即可
  • 如果需要在移动前对csv内容做校验(比如判断文件是否损坏、字段是否齐全),可以在移动逻辑前加df = pd.read_csv(old_full_path),编写你需要的校验规则,不符合要求的文件直接continue跳过即可
  • 如果你的分类规则不是“非数字开头即字符串开头”,而是要匹配指定固定前缀(比如必须以"sales_"开头才归为字符串类),直接把首字符判断逻辑替换为file_name.startswith("sales_")即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:03:26