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

Python如何在文件已存在时自动生成带序号的新文件避免覆盖

Python生成KML文件自动避免覆盖的解决方案

原因说明

你之前使用a/a+模式无法达到预期,是因为该模式的作用是向已有同名文件的末尾追加写入内容,不会生成新的文件,自然不能实现「不覆盖旧文件、生成带序号后缀的新文件」的需求。

实现逻辑

  • 先拆分基础文件名和后缀,从无序号的文件名开始校验是否存在
  • 若目标文件名已存在,就依次递增序号生成新的候选文件名,直到找到不存在的文件名为止
  • 写入KML文件时,同步修改文件内的<name>标签内容和生成的文件名保持一致

完整修改代码

from datetime import datetime
import os
import pandas as pd

data_df = pd.read_csv('21090700.CSV')

# 不要用dir做变量名,dir是Python内置函数,这里改为target_dir
target_dir = r"C:\mypath"  # 注意路径格式要正确,原写法缺了斜杠
base_filename = "csv2kml"
ext = ".kml"

# 生成不重复的文件名
counter = 0
while True:
    if counter == 0:
        current_filename = f"{base_filename}{ext}"
    else:
        current_filename = f"{base_filename}({counter}){ext}"
    current_filepath = os.path.join(target_dir, current_filename)
    if not os.path.exists(current_filepath):
        break
    counter += 1

# 写入KML内容
with open(current_filepath, 'w', encoding='utf-8') as f:
    f.write("<?xml version='1.0' encoding='UTF-8'?>\n")
    f.write("<kml xmlns='http://earth.google.com/kml/2.1'>\n")
    f.write("<Document>\n")
    f.write(f"   <name>{current_filename}</name>\n")
    # 后续你自己的KML内容写入逻辑保持不变即可

补充说明

  • 这里写入用w模式即可,因为我们已经提前确保了当前生成的文件名不存在,不会出现覆盖问题
  • 序号会从1开始依次递增,只要目标路径下存在对应序号的文件,就会自动跳到下一个序号,完全符合你要求的命名规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:45:04