Python 将 n 个参数作为列表并根据其索引创建文件夹和子文件夹的函数
Python Function that take n number of arguments as list and create folder and sub folders based on their index
我正在创建一个 python 函数,它将“n”个参数作为列表,并根据它们的位置创建文件夹和嵌套文件夹
例如
path = Path("Path to Directory")
root_folders = ['f1','f2','f3']
yr = ['2018', '2019']
mnth = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
"root_folders" 应该是“路径”中的主文件夹
“yr”应该是每个“root_folders”的子文件夹
“mnth”是每个“yr”的子文件夹
我已经能够使用以下代码实现此目的:
def folder(root,*args):
for a in args[0]:
path = os.path.join(root, a)
if not os.path.exists(path):
os.mkdir(path)
for b in args[1] :
path2 = os.path.join(path, b)
if not os.path.exists(path2):
os.mkdir(path2)
for c in args[2] :
path3 = os.path.join(path2, c)
if not os.path.exists(path3):
os.mkdir(path3)
folder(path,root_folders,yr,mnth)
但这有一定的局限性,因为嵌套的文件夹增加了可扩展性会是个问题。那么有没有什么解决方案可以使用递归或任何其他方法来实现
不确定这是否是您想要的,但我为您准备了一个简短的函数,它使用递归从字典创建文件夹结构:
def folder(root, folderdict, subdir=""):
"""
The folderdict could look something like this:
folderdict = {folder1: None, folder2: None, folder3:{subfolder1: None, subfolder2: {subsubfolder1}}}
"""
# set up path progression for recursion
current_directory = os.path.join(root, subdir)
for foldername, subfolders in folderdict.items():
path = os.path.join(current_directory, foldername)
if not os.path.exists(path):
os.mkdir(path)
# check if newly created path should contain subfolders
# if so: start recursion
if subfolders is not None:
new_subdir = os.path.join(subdir, foldername)
folder(root, subfolders, new_subdir)
不过要小心。递归通常不能很好地扩展。
您可以使用递归创建文件夹,在每次调用时向文件夹创建函数传递 运行 路径:
import os
def create_folders(root, *args):
if args:
for i in args[0]:
os.mkdir(p:=os.path.join(root, i))
create_folders(p, *args[1:])
root_folders = ['f1','f2','f3']
yr = ['2018', '2019']
mnth = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
create_folders(os.getcwd(), root_folders, yr, mnth)
我正在创建一个 python 函数,它将“n”个参数作为列表,并根据它们的位置创建文件夹和嵌套文件夹 例如
path = Path("Path to Directory")
root_folders = ['f1','f2','f3']
yr = ['2018', '2019']
mnth = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
"root_folders" 应该是“路径”中的主文件夹 “yr”应该是每个“root_folders”的子文件夹 “mnth”是每个“yr”的子文件夹
我已经能够使用以下代码实现此目的:
def folder(root,*args):
for a in args[0]:
path = os.path.join(root, a)
if not os.path.exists(path):
os.mkdir(path)
for b in args[1] :
path2 = os.path.join(path, b)
if not os.path.exists(path2):
os.mkdir(path2)
for c in args[2] :
path3 = os.path.join(path2, c)
if not os.path.exists(path3):
os.mkdir(path3)
folder(path,root_folders,yr,mnth)
但这有一定的局限性,因为嵌套的文件夹增加了可扩展性会是个问题。那么有没有什么解决方案可以使用递归或任何其他方法来实现
不确定这是否是您想要的,但我为您准备了一个简短的函数,它使用递归从字典创建文件夹结构:
def folder(root, folderdict, subdir=""):
"""
The folderdict could look something like this:
folderdict = {folder1: None, folder2: None, folder3:{subfolder1: None, subfolder2: {subsubfolder1}}}
"""
# set up path progression for recursion
current_directory = os.path.join(root, subdir)
for foldername, subfolders in folderdict.items():
path = os.path.join(current_directory, foldername)
if not os.path.exists(path):
os.mkdir(path)
# check if newly created path should contain subfolders
# if so: start recursion
if subfolders is not None:
new_subdir = os.path.join(subdir, foldername)
folder(root, subfolders, new_subdir)
不过要小心。递归通常不能很好地扩展。
您可以使用递归创建文件夹,在每次调用时向文件夹创建函数传递 运行 路径:
import os
def create_folders(root, *args):
if args:
for i in args[0]:
os.mkdir(p:=os.path.join(root, i))
create_folders(p, *args[1:])
root_folders = ['f1','f2','f3']
yr = ['2018', '2019']
mnth = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
create_folders(os.getcwd(), root_folders, yr, mnth)