如何在 Windows 中创建一个唯一的文件夹名称(位置路径)?

How to create a unique folder name (location path) in Windows?

我正在编写一个脚本,每次 运行 时将一些图像保存在一个文件夹中。 我想为每个 运行s 创建一个新文件夹,其中包含一个枚举文件夹名称。例如,如果我第一次 运行 它只是将图像保存在 C:\images\folder1 中,而下次我 运行 它会将图像保存在 C:\images\folder2 和 [=13] =] 等等。

如果我删除这些文件夹,然后再次启动 运行ning,它将再次从 "C:\images\folder1" 开始。

我发现此解决方案适用于文件名,但不适用于文件夹名: Create file but if name exists add number

我觉得你可以通过获取目录列表然后循环遍历数字 1 到 n 来寻找不同的可能目录,直到找不到一个为止。

from pathlib import Path
import os 

path = Path('.')
folder = "folder"
i = 1

dirs = [e for e in path.iterdir() if e.is_dir()]

while True:
    if folder+str(i) not in dirs:
        folder = folder+str(i)
        break
    i = i+1
os.mkdir(folder)

如果我有任何拼写错误,我很抱歉,但这似乎是一种可行的方法。

pathlib 库是处理任何类型的文件夹或文件的标准 pythonic 方式,并且与系统无关。至于创建新文件夹名称,可以通过多种方式完成。您可以检查每个文件是否存在(如 Patrick Gorman 的回答),或者您可以使用计数器保存用户配置文件,该计数器跟踪您离开的位置,或者如果文件已经存在则可以调用文件创建功能移动计数器.如果您计划拥有大量子目录(数百万),那么您可以考虑对要创建的下一个文件夹执行二进制搜索(而不是遍历目录)。

无论如何,在 windows 中创建同名的 file/folder,在文件名中添加 (2)、(3)、(4) 等。 space 和括号使识别 file/folder 的数字变得特​​别容易。如果你想直接附加数字,比如 folder1、folder2、folder3 等,那么检测起来就有点棘手了。我们本质上需要检查文件夹以整数结尾的内容。在棘手的字符串中查找特定表达式通常使用 re(正则表达式)来完成。如果我们有 space 和括号,我们可能不需要重新检测字符串中的整数。

from pathlib import Path
import re

def create_folder(string_or_path):
    path = Path(string_or_path)
    if not path.exists(): 
        #You can't create files and folders with the same name in Windows. Hence, check exists. 
        path.mkdir() 
    else:
        #Check if string ends with numbers and group the first part and the numbers. 
        search = re.search('(.*?)([0-9]+$)',path.name) 
        if search:
            basename,ending = search.groups()
            newname = basename + str(int(ending)+1)
        else:
            newname = path.name + '1'
        create_folder(path.parent.joinpath(newname))

path = Path(r'C:\images\folder1')
create_folder(path) #creates folder1
create_folder(path) #creates folder2, since folder1 exists
create_folder(path) #creates folder3, since folder1 and 2 exist
path = Path(r'C:\images\space')
create_folder(path) #creates space
create_folder(path) #creates space1, since space exists

注意:在处理 windows 路径时一定要使用原始字符串,因为 "\f" 表示 python 字符串中的某些内容;因此你要么必须做 "\f" 要么告诉 python 它是一个原始字符串。