Python移动文件到文件夹时不覆盖已有同名文件的实现方法
问题修复方案
要实现同名文件不覆盖的移动逻辑,核心是在移动前先校验目标文件名是否被占用,被占用就自动给文件名加递增数字后缀,直到找到可用文件名再移动就行。
另外你原来写的代码本身有逻辑问题:把选文件、移动的逻辑全写在了「文件夹不存在」的if分支里,等于文件夹只要已经存在,点上传完全没反应,这块得一起改了,不然光补else没用。
修复后完整可运行代码
import os import shutil from pathlib import Path from tkinter import filedialog, messagebox def upload_image(): # 没选中列表项直接退出 if not lista_interventi.focus(): return # 统一处理目标文件夹,不存在就创建 target_folder = Path(r"C:\GEC\image_DB") if not target_folder.exists(): os.makedirs(target_folder) # 选择要上传的图片,点了取消直接退出 selected_img = filedialog.askopenfilename( initialdir="", title="Seleziona il file", filetypes=(("jpg files", "*.jpg"), ("all files", "*.*")) ) if not selected_img: return # 生成初始目标文件名 file_sn = entry_claim.get() target_path = target_folder / f"{file_sn}.jpg" # 重名自动加序号,绝不覆盖 num = 1 while target_path.exists(): target_path = target_folder / f"{file_sn}_{num}.jpg" num += 1 # 执行移动+弹窗提示 shutil.move(selected_img, target_path) messagebox.showinfo("Operazione riuscita", "Immagine inserita")
核心逻辑说明
- 重名处理规则:如果
xxx.jpg已经存在,就自动存成xxx_1.jpg,如果xxx_1.jpg也存在就存xxx_2.jpg,以此类推,永远不会覆盖已有文件 - 修正了原有逻辑的分支错误:不管文件夹是否存在,只要调用函数就走统一的选文件、校验、移动流程,不会出现文件夹存在就无法上传的问题
- 补了取消选择文件的判断:用户点了文件选择框的取消按钮不会报错
内容的提问来源于stack exchange,提问作者Francesco T. Neruda
相关产品推荐
相关产品推荐

