在python中创建新文件,不要覆盖现有文件

2024-05-29 05:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我用三个函数来写一个文件,我试着不覆盖这个文件。我希望每次运行代码时都生成一个新文件 打开(“atx.csv“w”)作为输出: 写入程序=csv.writer(输出)


Tags: 文件csv函数代码程序writeratx
3条回答

您可以这样做,这样每个文件的名称都会有所不同,因此不会被覆盖:

for v in ['1','2','3']:
    with open("atx_{}.csv".format(v), 'w')as output:
         writer = csv.writer(output)

您只使用一个文件名。当使用与名称atx.csv相同的值时,要么用w覆盖它,要么用a附加。在

如果要创建新文件,请先检查文件是否存在。在

import os
files = os.listdir()
files = [f for f in files if 'atx' in f]
num = str(len(files)) if len(files) > 0 else ''
filename = "atx{0}.csv".format(num)

with open(filename, 'w')as output:
     writer = csv.writer(output)

如果每次执行脚本时都要写入不同的文件,则需要更改文件名,否则它们将被覆盖。在

import os
import csv

filename = "atx"

i = 0
while os.path.exists(f"{filename}{i}.csv"):
    i += 1

with open(f"{filename}{i}.csv", 'w') as output:
     writer = csv.writer(output)
     writer.writerow([1, 2, 3]) #or whatever you want to write in the file, this line is just an example

这里我使用os.path.exists()来检查磁盘上是否已经存在一个文件,并增加计数器。在

第一次运行脚本时,会得到axt0.csv,第二次是axt1.csv,依此类推。在

为你的三个文件复制这个。在

编辑

还请注意,这里我使用的是formatted string literals,这是python3.6之后提供的。如果您有早期版本的python,请使用"{}{:d}.csv".format(filename, i)而不是{}

在评论后编辑bis

如果在脚本执行过程中,同一个文件需要更多的函数来操作,那么我想到的最简单的事情就是在函数之外打开writer并将其作为参数传递。在

^{pr2}$

每次调用其中一个函数时,它都会写入同一个文件,并将输出附加到文件的底部。在

当然还有其他方法。您可能只在调用的第一个函数中检查文件名是否存在,而在其他函数中,只需使用'a'选项打开文件,以附加输出。在

相关问题 更多 >

    热门问题