防止我的文件被覆盖-python
我目前正在使用simple方法在应用程序运行时创建一个文件防止我的文件被覆盖-python,python,Python,我目前正在使用simple方法在应用程序运行时创建一个文件 file = open('myfile.dat', 'w+') 但是我注意到每次运行时都会覆盖文件,我想做的是,如果它已经存在,创建一个名为myfilex.dat的新文件,其中x是文件以前的副本数,有没有快速有效的方法 谢谢:) 编辑:我知道如何使用os.path.exists函数检查它是否已经存在,但我想问的是它是否确实存在。如果有意义,我如何简单地计算版本数。如果没有,对不起。你可以做两件事,要么用append打开,即file=O
file = open('myfile.dat', 'w+')
但是我注意到每次运行时都会覆盖文件,我想做的是,如果它已经存在,创建一个名为myfilex.dat的新文件,其中x是文件以前的副本数,有没有快速有效的方法
谢谢:)
编辑:我知道如何使用os.path.exists函数检查它是否已经存在,但我想问的是它是否确实存在。如果有意义,我如何简单地计算版本数。如果没有,对不起。你可以做两件事,要么用append打开,即
file=Open('myfile.dat','a')
或检查文件是否存在,并为用户提供覆盖选项。Python有许多选项。你可以查一下这个问题,看看有没有启发
检查一下你的文件是否已经存在
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+')
您可以使用时间戳,以便每次执行程序时,它都会写入不同的文件:
import time
file = open('myfile.%d.dat' % time.time(), 'w+')
没有什么特别快,但有效?当然我习惯了备份系统,我会:
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()
考虑
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
由确定,并且X
是一个整数,从1开始到max\u trys
(我将其默认值设置为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
那么,为什么不检查一下文件是否已经存在呢?我希望编辑得更清楚一点,我可以检查文件是否存在,但我正在尝试附加已经存在的副本数可能是