如何在 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 它是一个原始字符串。
我正在编写一个脚本,每次 运行 时将一些图像保存在一个文件夹中。
我想为每个 运行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 它是一个原始字符串。