如何将.dat文件移至目标文件夹,重名时自动递增重命名
解决.dat文件移动时的重名自动递增重命名问题
原代码直接使用shutil.move移动文件,当目标文件夹存在同名文件时会触发错误(Windows环境)或直接覆盖文件,无法实现重名时自动生成file(1).dat这类递增序号文件名的需求。以下是优化后的代码:
from pathlib import Path import glob import shutil src_fldr = r"C:\OUTBOX" dst_fldr = r"C:\OUTBOX\OUTBOX(Backup)" # 确保目标文件夹存在,不存在则自动创建 Path(dst_fldr).mkdir(exist_ok=True) for dat_file_path in glob.glob(f"{src_fldr}\\*.dat"): src_path = Path(dat_file_path) # 拆分文件名主体和扩展名 file_base = src_path.stem file_ext = src_path.suffix # 初始化目标文件路径 target_path = Path(dst_fldr) / src_path.name # 循环检测重名,生成递增序号的文件名 count = 1 while target_path.exists(): new_filename = f"{file_base}({count}){file_ext}" target_path = Path(dst_fldr) / new_filename count += 1 # 执行文件移动 shutil.move(str(src_path), str(target_path))
关键逻辑说明
- 路径处理:使用
pathlib.Path替代字符串拼接路径,适配不同操作系统的路径规则,避免手动拼接出错 - 目标文件夹预检查:
mkdir(exist_ok=True)确保目标文件夹存在,无需额外判断 - 重名处理:通过循环检测目标路径是否存在,每次递增序号生成新文件名,直到找到未被占用的文件名,保证不会覆盖已有文件
- 兼容性:将
Path对象转为字符串传入shutil.move,适配不同Python版本的API要求
内容的提问来源于stack exchange,提问作者Miko Efa
相关产品推荐
相关产品推荐

