Python批量复制activities.json并重命名时FileExistsError报错如何解决
问题原因
- 路径配置错误:代码中复制文件的目标路径是
C:/Users/Adam/Desktop/Linkedin analyze/tableau bsp/1/3,但后续重命名用的路径是C:/Users/A.Abboudi/Desktop/Linkedin analyze/tableau bsp/1/3/activities.json,两个用户目录不一致,导致重命名操作没有命中刚复制到目标目录的文件。且从报错堆栈看,实际执行的重命名操作第一个参数是原文件的绝对路径abs_path,相当于直接修改源目录的文件,逻辑完全偏离需求。 - 重命名目标路径缺失:重命名的第二个参数只有纯数字
m,没有拼接目标目录路径,会默认把文件重定向到Python脚本的当前工作目录,若该目录下已有同名文件就会触发FileExistsError。 - 复制逻辑冗余:先复制同名文件到目标目录再重命名的逻辑,会导致第二次复制时,目标目录中还存在上次没改名成功的
activities.json,本身就会触发文件存在冲突。
解决方法
直接在复制阶段就指定目标文件的最终名称,不需要额外执行重命名操作,同时统一路径配置,提前校验目标目录是否存在。如果需要动态输入成员ID,把match_id_suffix的赋值改成match_id_suffix = input("请输入目标成员ID: ")即可。
修正后代码如下:
import os import shutil rootDir = 'C:/Users/Adam/Desktop/Linkedin/linkedin_hb_ma' # 提前定义统一的目标目录,避免硬写出错 target_dir = 'C:/Users/Adam/Desktop/Linkedin analyze/tableau bsp/1/3' # 确保目标目录存在,不存在则自动创建 os.makedirs(target_dir, exist_ok=True) file_counter = 1 # 要匹配的成员ID后缀 match_id_suffix = "1eb95ebb-d87d-Xd7-8c84-Xc" for dirName, _, fileList in os.walk(rootDir): if dirName.endswith(match_id_suffix): for file in fileList: if file == "activities.json": src_path = os.path.join(dirName, file) print(f'找到匹配文件: {src_path}') # 直接指定最终目标路径,无需单独执行重命名 dst_path = os.path.join(target_dir, f"{file_counter}.json") shutil.copy(src_path, dst_path) print(f"已复制到: {dst_path}") file_counter += 1
内容的提问来源于stack exchange,提问作者aymane
相关产品推荐
相关产品推荐

