You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:31:41