防止我的文件被覆盖 - python

时间:2015-03-12 19:57:26

标签: python

我目前正在使用简单方法

在运行我的应用程序时创建一个文件
file = open('myfile.dat', 'w+')

然而我注意到这是在每次运行时覆盖文件,我想要做的是如果它已经存在,创建一个名为myfilex.dat的新文件,其中x是文件的先前副本的数量,是否存在这是一种快速有效的方法吗?

谢谢:)

编辑:我知道如何使用os.path.exists函数检查它是否已经存在,但是我在问它是否确实存在如果有意义的话,如果有意义的话,我怎么能最终使用版本的数量对不起如果它

5 个答案:

答案 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其中rootextensionos.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+')