Python如何基于新旧文件名列表批量重命名指定文件夹内的文件
Python 批量重命名解决方案
注意:你给出的
oldFname和NewFname为集合类型,Python集合不保证元素存储顺序,直接遍历配对极大概率出现新旧文件名对应错误的问题,优先推荐使用字典明确对应关系,避免文件名乱改。
稳妥方案:字典明确映射关系
先将你确定的新旧文件名对应关系整理为字典,保证每个旧文件对应唯一的新文件名,代码如下:
import os # 基础配置 FldName = r'C:\Users\Shei\Documents\Test' # 按你的实际对应关系修改字典,键为旧文件名,值为新文件名 fname_map = { 'mangoes.txt': 'random.txt', 'apple.txt': 'example1.txt', 'banana.txt': 'something.txt' } for old_name, new_name in fname_map.items(): # 拼接完整路径,避免脚本不在目标文件夹运行时报错 old_path = os.path.join(FldName, old_name) new_path = os.path.join(FldName, new_name) # 异常捕获避免程序直接崩溃 try: os.rename(old_path, new_path) print(f"重命名成功:{old_name} → {new_name}") except FileNotFoundError: print(f"重命名失败:旧文件 {old_name} 不存在") except FileExistsError: print(f"重命名失败:新文件名 {new_name} 已存在") except PermissionError: print(f"重命名失败:无文件夹读写权限") except Exception as e: print(f"重命名失败 {old_name}:{str(e)}")
替代方案:集合转列表按索引配对(不推荐,存在匹配错误风险)
如果你确定两个集合的元素顺序完全对应,可以用以下代码,但运行前务必先备份文件:
import os FldName = r'C:\Users\Shei\Documents\Test' oldFname = {'mangoes.txt', 'apple.txt', 'banana.txt'} NewFname = {'random.txt', 'example1.txt', 'something.txt'} # 集合转列表,注意顺序可能和你预期不一致 old_list = list(oldFname) new_list = list(NewFname) if len(old_list) != len(new_list): print("错误:新旧文件名数量不一致") else: for old_name, new_name in zip(old_list, new_list): old_path = os.path.join(FldName, old_name) new_path = os.path.join(FldName, new_name) try: os.rename(old_path, new_path) print(f"重命名成功:{old_name} → {new_name}") except Exception as e: print(f"重命名失败 {old_name}:{str(e)}")
注意事项
- 运行代码前请先备份目标文件夹内的所有文件,避免匹配错误导致文件无法找回
- 如果需要覆盖已有同名文件,可以在捕获
FileExistsError时先删除原有新文件再执行重命名,不推荐这么做容易丢失数据 - 确保你的Windows账户对
C:\Users\Shei\Documents\Test文件夹有读写权限
内容的提问来源于stack exchange,提问作者Py_junior
相关产品推荐
相关产品推荐

