我目前正在使用简单方法
在运行我的应用程序时创建一个文件file = open('myfile.dat', 'w+')
然而我注意到这是在每次运行时覆盖文件,我想要做的是如果它已经存在,创建一个名为myfilex.dat的新文件,其中x是文件的先前副本的数量,是否存在这是一种快速有效的方法吗?
谢谢:)
编辑:我知道如何使用os.path.exists函数检查它是否已经存在,但是我在问它是否确实存在如果有意义的话,如果有意义的话,我怎么能最终使用版本的数量对不起如果它答案 0 :(得分:2)
您可以执行以下两项操作:使用file = open('myfile.dat', 'a')
附加打开或检查文件是否存在,并为用户提供覆盖选项。 Python有多个选项。您可以查看此问题以获得启发
How do I check whether a file exists using Python?
答案 1 :(得分:2)
您可以使用时间戳,这样每次执行程序时都会写入不同的文件:
import time
file = open('myfile.%d.dat' % time.time(), 'w+')
答案 2 :(得分:1)
没有什么特别快,但有效吗?当然!我已经习惯了备用系统:
filename.ext
filename-1.ext # older
filename-2.ext # older still
filename-3.ext # even older
这比你想做的稍微困难一些。您希望filename-N.ext
成为最新文件!让我们使用glob
来查看与该名称匹配的文件数量,然后创建一个新文件!
from glob import glob
import os.path
num_files = len(glob.glob(os.path.join(root, head, filename + "*", ext)))
# where:
# root = r"C:\"
# head = r"users\username\My Documents"
# filename = "myfile"
# ext = "dat"
if num_files = 0:
num_files = "" # handles the case where file doesn't exist AT ALL yet
with open(os.path.join(root, head, filename + str(num_files), ext), 'w+'):
do_stuff_to_file()
答案 3 :(得分:0)
考虑
import os
def build_filename(name, num=0):
root, ext = os.path.splitext(name)
return '%s%d%s' % (root, num, ext) if num else name
def find_next_filename(name, max_tries=20):
if not os.path.exists(name): return name
else:
for i in range(max_tries):
test_name = build_filename(name, i+1)
if not os.path.exists(test_name): return test_name
return None
如果您的文件名不存在,它将返回您的文件名。
如果您的文件名确实存在,则会尝试rootX.extension
其中root
和extension
由os.path.splittext
确定,而X
是一个整数,从1,结束于max_tries
(我默认为20,但您可以更改默认值或传递不同的参数)。
如果找不到文件,该函数将返回None
。
请注意,这里仍然存在竞争条件(一个文件是由另一个进程创建的,在您检查后具有冲突名称),但它是您所说的。
# When the files doesn't exist
print find_next_filename('myfile.dat') # myfile.dat
# When the file does exist
print find_next_filename('myfile.dat') # myfile1.dat
# When the file does exist, as does "1" and "2"
print find_next_filename('myfile.dat') # myfile3.dat
答案 4 :(得分:-1)
请检查您的文件是否已存在?
name = "myfile"
extension =".dat"
x = 0
fileName = name + extension
while(!os.path.exists(fileName)):
x = x + 1
fileName = name + x + extension
file = open(fileName, 'w+')