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

如何复制指定扩展名文件到新文件夹且避免覆盖,重命名重复文件?

解决KML文件复制时的同名覆盖问题

这个场景太常见了——批量复制文件时,最怕不小心把目标文件夹里已有的文件覆盖掉。我来帮你修改代码,实现**遇到同名文件时自动重命名为「filename-copy」格式(如果copy版本也存在,会自动递增编号)**的需求。

核心思路

我们需要先检查目标路径里是否已经存在同名文件:

  • 如果不存在,直接复制;
  • 如果存在,生成一个不会重复的新文件名(比如filename-copy.kml,如果这个也存在就用filename-copy1.kml,以此类推),再执行复制操作。

修改后的完整代码

from qgis.core import *
import glob, os, shutil, time, qgis

def get_unique_filename(dest_dir, filename):
    """生成目标目录中不重复的文件名,避免覆盖"""
    # 拆分文件名和扩展名
    name, ext = os.path.splitext(filename)
    # 初始候选路径
    candidate_path = os.path.join(dest_dir, filename)
    
    # 如果文件不存在,直接返回原路径
    if not os.path.exists(candidate_path):
        return candidate_path
    
    # 如果存在,开始生成带后缀的文件名
    counter = 1
    while True:
        # 构造新文件名:第一次是name-copy.ext,后续递增为name-copy1.ext、name-copy2.ext
        new_filename = f"{name}-copy{counter}{ext}" if counter > 1 else f"{name}-copy{ext}"
        new_path = os.path.join(dest_dir, new_filename)
        if not os.path.exists(new_path):
            return new_path
        counter += 1

path = r"C:\Temp\testinput"
dest = r"C:\Temp\testoutput"

for root, d_names, f_names in os.walk(path):
    for f in f_names:
        if f.endswith('.kml'):
            src = os.path.join(root, f)
            # 保留你原来的文件信息打印
            print(time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime(src))))
            print(os.path.realpath(src))
            
            # 获取安全的目标文件路径
            dest_file_path = get_unique_filename(dest, f)
            # 执行复制
            shutil.copy2(src, dest_file_path)
            # 可选:打印复制后的路径,方便验证结果
            print(f"已复制到:{dest_file_path}")

代码说明

  1. 辅助函数get_unique_filename:

    • 专门处理文件名去重逻辑,自动检测目标目录的已有文件,生成不会重复的新名称;
    • 支持多次同名场景:比如原目录有3个test.kml,目标目录会依次生成test.kml、test-copy.kml、test-copy1.kml。
  2. 主逻辑修改:

    • 不再直接调用shutil.copy2(src, dest),而是先通过辅助函数拿到安全的目标路径,再执行复制;
    • 保留了你原来的文件信息打印,还新增了复制后路径的输出,方便你验证复制结果。

这样修改后,就完全不用担心覆盖目标文件夹里的已有文件啦!

内容的提问来源于stack exchange,提问作者Apmartin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:39:25