我正在使用三个函数写入文件,并且试图不覆盖该文件。我想每次运行代码时都生成一个新文件 使用open(“ atx.csv”,'w')作为输出: writer = csv.writer(输出)
答案 0 :(得分:1)
如果您希望在每次执行脚本时都写入不同的文件,则需要更改文件名,否则它们将被覆盖。
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)
代替f"{filename}{i}.csv"
评论后编辑bis
如果在脚本执行过程中需要通过更多功能来操纵同一文件,那么我想到的最简单的事情是在功能之外打开编写器并将其作为参数传递。
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)
foo(writer, ...) #put the arguments of your function instead of ...
bar(writer, ...)
etc(writer, ...)
这样,每次调用其中一个函数时,它将写入同一文件,并将输出追加到文件底部。
当然还有其他方法。您可能只在调用的第一个函数中检查文件名是否存在,而在其他函数中,只需使用'a'
选项打开文件以附加输出即可。
答案 1 :(得分:0)
您可以执行以下操作,以便每个文件的名称都有些不同,因此不会被覆盖:
for v in ['1','2','3']:
with open("atx_{}.csv".format(v), 'w')as output:
writer = csv.writer(output)
答案 2 :(得分:0)
您仅使用一个文件名。如果使用与名称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)
答案 3 :(得分:-2)
将with open("atx.csv", 'w')
更改为with open("atx.csv", 'a')
https://www.guru99.com/reading-and-writing-files-in-python.html#2