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
相关产品推荐
相关产品推荐

