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

按前缀匹配迁移并重命名Excel文件的代码问题求助

解决方案:匹配前缀文件夹并在目标目录内重命名文件

我来帮你搞定这个文件处理的问题!核心要解决两个关键点:匹配前缀为指定字符串的目标文件夹,以及在目标文件夹内部完成重命名。下面用Python给出完整的实现方案,包含详细注释和异常处理:

实现思路

  1. 遍历源目录,筛选出所有以指定前缀开头的Excel文件(支持.xlsx/.xls格式)
  2. 在目标根目录下,查找所有名称以指定前缀开头的文件夹(比如XXXXX FOLDER、XXXXX-2024这类都能匹配)
  3. 将筛选出的Excel文件复制到匹配的目标文件夹中
  4. 在目标文件夹内完成文件重命名(可自定义重命名规则)

完整代码示例

import os
import shutil

def copy_and_rename_excel(source_dir, target_root_dir, prefix):
    # 1. 筛选源目录中以指定前缀开头的Excel文件
    excel_extensions = ('.xlsx', '.xls')
    source_files = [
        f for f in os.listdir(source_dir)
        if f.startswith(prefix) and f.lower().endswith(excel_extensions)
    ]
    
    if not source_files:
        print(f"未找到以'{prefix}'开头的Excel文件")
        return
    
    # 2. 查找目标根目录下以指定前缀开头的文件夹
    target_folders = [
        d for d in os.listdir(target_root_dir)
        if os.path.isdir(os.path.join(target_root_dir, d)) and d.startswith(prefix)
    ]
    
    if not target_folders:
        print(f"未找到以'{prefix}'开头的目标文件夹")
        return
    elif len(target_folders) > 1:
        print(f"找到多个匹配的目标文件夹:{target_folders},将使用第一个:{target_folders[0]}")
    
    # 选定目标文件夹
    target_folder = os.path.join(target_root_dir, target_folders[0])
    
    # 3. 复制文件并在目标文件夹内重命名
    for file_name in source_files:
        source_path = os.path.join(source_dir, file_name)
        # 构建临时目标路径(先复制到目标文件夹,再重命名)
        temp_target_path = os.path.join(target_folder, file_name)
        try:
            # 复制文件到目标文件夹(保留文件元数据)
            shutil.copy2(source_path, temp_target_path)
            print(f"已复制文件:{file_name} -> {target_folder}")
            
            # 自定义重命名规则:示例为去掉前缀,可按需修改
            new_file_name = file_name.replace(prefix, "", 1)  # 仅替换第一个前缀
            # 处理前缀去掉后为空的情况
            if not new_file_name.strip():
                new_file_name = f"{prefix}_renamed.xlsx"
            
            final_target_path = os.path.join(target_folder, new_file_name)
            # 处理重复文件名,自动添加序号
            counter = 1
            while os.path.exists(final_target_path):
                name, ext = os.path.splitext(new_file_name)
                final_target_path = os.path.join(target_folder, f"{name}_{counter}{ext}")
                counter += 1
            
            # 执行重命名
            os.rename(temp_target_path, final_target_path)
            print(f"已重命名为:{new_file_name if counter ==1 else f'{name}_{counter-1}{ext}'}")
        
        except Exception as e:
            print(f"处理文件{file_name}时出错:{str(e)}")

# 示例调用,替换为你的实际路径和前缀
if __name__ == "__main__":
    SOURCE_DIR = "/path/to/your/source/directory"
    TARGET_ROOT_DIR = "/path/to/your/target/root/directory"
    PREFIX = "XXXXX"
    
    copy_and_rename_excel(SOURCE_DIR, TARGET_ROOT_DIR, PREFIX)

关键细节说明

  • 文件夹匹配逻辑:用d.startswith(prefix)匹配所有以指定前缀开头的文件夹,不管后面跟着空格、连字符、日期等后缀都能命中
  • 重命名灵活性:示例中是去掉文件名前缀,你可以修改new_file_name的生成逻辑,比如改为固定名称、添加时间戳或自定义后缀
  • 异常防护:捕获了文件复制、重命名过程中的异常,避免程序意外崩溃
  • 重复文件处理:如果目标文件夹已有同名文件,会自动添加序号(比如report.xlsx→report_1.xlsx)

你只需要替换示例中的路径和前缀为实际值,就能直接运行使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:30:13