Python保存文件时如何自动添加递增序号避免重名报错
实现方案
你贴出的原始代码存在一处语法错误:open('report.csv'), 'x'中'report.csv'后多写了一个闭合括号,运行前需要先删除。
要实现重名时自动追加三位递增序号的命名规则,可按「优先使用默认名→存在则依次尝试带序号的文件名→找到首个未占用文件名写入」的逻辑实现,保留你原本使用的x独占创建模式,可彻底避免文件被意外覆盖的问题。
完整可运行代码如下:
import csv import os # 替换为你实际要写入的二维数据 array_i_have_to_write_in_csv = [] # 文件名基础配置 file_base = "report" file_ext = ".csv" target_file = f"{file_base}{file_ext}" # 循环查找首个未被占用的文件名 seq = 1 while os.path.exists(target_file): target_file = f"{file_base}-{seq:03d}{file_ext}" seq += 1 # 执行csv写入 with open(target_file, 'x', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(array_i_have_to_write_in_csv)
逻辑说明
- 格式化字符串中的
:03d会自动为序号补前导零,固定占3位字符长度,生成的文件名就是你需要的report-001.csv、report-002.csv格式,序号超过99时会自动变为report-100.csv,不会出现长度错乱。 - 代码中添加了
encoding='utf-8'参数,可避免Windows环境下打开csv文件出现中文乱码,无中文需求可自行删除。 - 如果是多进程同时运行脚本的极端场景,文件名校验到实际打开文件的间隙可能出现同名文件被其他进程创建的情况,此时
x模式会抛出FileExistsError,只需在外层加一层对应异常捕获、触发重试即可,单脚本运行场景无需额外处理。
内容的提问来源于stack exchange,提问作者Dario Costa
相关产品推荐
相关产品推荐

