按前缀匹配迁移并重命名Excel文件的代码问题求助
解决方案:匹配前缀文件夹并在目标目录内重命名文件
我来帮你搞定这个文件处理的问题!核心要解决两个关键点:匹配前缀为指定字符串的目标文件夹,以及在目标文件夹内部完成重命名。下面用Python给出完整的实现方案,包含详细注释和异常处理:
实现思路
- 遍历源目录,筛选出所有以指定前缀开头的Excel文件(支持
.xlsx/.xls格式) - 在目标根目录下,查找所有名称以指定前缀开头的文件夹(比如
XXXXX FOLDER、XXXXX-2024这类都能匹配) - 将筛选出的Excel文件复制到匹配的目标文件夹中
- 在目标文件夹内完成文件重命名(可自定义重命名规则)
完整代码示例
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
相关产品推荐
相关产品推荐

