【问题标题】:Rename a file that already exists重命名已存在的文件
【发布时间】:2017-11-21 18:07:11
【问题描述】:

我正在学习 python 和英语。我有一个问题可能很容易,但我无法解决。我有一个 .txt 的文件夹,我能够通过正则表达式提取每个数字的序列。我用从 .txt 中提取的序列重命名每个文件

path_txt = (r'''C:\Users\user\Desktop\Doc_Classifier\TXT''')

for TXT in name_files3:
    with open(path_txt + '\\' + TXT, "r") as content:
        search = re.search(r'(([0-9]{4})(/)(([1][9][0-9][0-9])|([2][0-9][0-9][0-9])))', content.read())

    if search is not None:
        name3 = search.group(0)
        name3 = name3.replace("/", "")
        os.rename(os.path.join(path_txt, TXT),
                  os.path.join("Processos3", name3 + "_" + str(random.randint(100, 999)) + ".txt"))

我需要检查文件是否已经存在,并通过添加增量重命名它。目前为了区分文件,我在名称中添加了一个随机数 (random.randint(100, 999))

PS:目前脚本通过正则表达式在 .txt 中找到“7526/2016”。去除 ”/”。用“75262016”+一个随机数重命名文件(例如:7526016_111)。而不是使用随机数重命名,我想检查文件是否已经存在,并使用增量重命名(例如:7526016_copy1、7526016_copy2)

【问题讨论】:

标签: python python-3.x


【解决方案1】:

替换:

os.rename(
    os.path.join(path_txt, TXT),
    os.path.join("Processos3", name3 + "_" + str(random.randint(100, 999)) + ".txt")
)

与:

fp = os.path.join("Processos3", name3 + "_%d.txt")
postfix = 0

while os.path.exists(fp % postfix):
    postfix += 1

os.rename(
    os.path.join(path_txt, TXT),
    fp % postfix
)

【讨论】:

    【解决方案2】:

    下面的代码遍历当前工作目录中的文件,并查找基本文件名及其增量。一旦它找到一个未使用的增量,它就会打开一个具有该名称的文件并写入它。因此,如果您已经拥有文件“foo.txt”、“foo1.txt”和“foo2.txt”,代码将创建一个名为“foo3.txt”的新文件。

    import os
    filenames = os.listdir()
    
    our_filename = "foo"
    cur = 0
    cur_filename = "foo"
    extension = ".txt"
    while(True):
        if (cur_filename) in filenames:
             cur += 1
             cur_filename = our_filename + str(cur) + extension
        else:
             # found a filename that doesn't exist
             f = open(cur_filename,'w')
             f.write(stuff)
             f.close()
    

    【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2014-07-20
    • 2015-06-14
    • 1970-01-01
    • 2020-09-17
    • 2017-02-20
    • 2019-02-04
    • 2023-04-06
    相关资源
    最近更新 更多