Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建新文件,don';t在python中覆盖现有文件_Python - Fatal编程技术网

创建新文件,don';t在python中覆盖现有文件

创建新文件,don';t在python中覆盖现有文件,python,Python,我正在用三个函数写入一个文件,并尝试不覆盖该文件。我希望每次运行代码时都生成一个新文件 以open(“atx.csv”和“w”)作为输出: writer=csv.writer(输出)将打开(“atx.csv”,“w”)更改为打开(“atx.csv”,“a”) 您可以这样做,使每个文件的名称略有不同,因此不会被覆盖: for v in ['1','2','3']: with open("atx_{}.csv".format(v), 'w')as output: write

我正在用三个函数写入一个文件,并尝试不覆盖该文件。我希望每次运行代码时都生成一个新文件 以open(“atx.csv”和“w”)作为输出: writer=csv.writer(输出)

打开(“atx.csv”,“w”)
更改为
打开(“atx.csv”,“a”)


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

for v in ['1','2','3']:
    with open("atx_{}.csv".format(v), '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
在这里,我用来检查磁盘上是否已经存在文件,并递增计数器

第一次运行脚本时,将获得axt0.csv,第二次运行axt1.csv,依此类推

为您的三个文件复制此文件

编辑

还要注意的是,这里我使用的是自python3.6以来可用的。如果您有早期版本的python,请使用
“{}{:d}.csv”.format(filename,i)
而不是
f“{filename}{i}.csv”

在评论后编辑bis

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

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'
选项打开文件即可附加输出。

您只使用了一个文件名。当使用与名称相同的值
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)

这三个文件是什么?您只使用了一个文件名,
atx.csv
。如果在3个文件中写入了相同的数据,只需用3个不同的文件复制代码即可names@Austin不是完全相反,它是附加的,而不是完全替换的,但潜在的仍然不是OPwants@jonrsharpe,我的话肯定错了。无论如何都不回答OP。有没有一种方法可以不用for循环来完成它?你可以更手动地完成它,并用open(“atx_1.csv”)实际写出“。。。。。。“对于每一个?如果你需要多次重复使用此代码,你应该采用下面Valentino的解决方案。问题是我用三个函数打开和关闭此文件相同的文件是用三个不同的函数打开和关闭的吗?”?是否希望函数写入同一文件?可以编辑您的问题,提供这些详细信息。是的,同一个文件通过三个不同的函数打开和关闭,并且函数写入同一个文件。它表示foo-bar和etc未定义foo-bar和etc是您的三个函数。我不知道它们叫什么,就用它们吧。但是您需要重写它们,以传递给编写器并在函数体中使用它