我正在尝试在PC中的特定位置创建一堆目录和子目录。我的流程是这样的:
这是我使用os
模块提出的代码:
def Test():
main_dir = ["FolderA", "FolderB"]
common_dir = ["SubFolder1", "SubFolder2", "SubFolder3"]
for dir1 in main_dir:
if not os.path.isdir(dir1):
for dir2 in common_dir:
os.makedirs("%s/%s" %(dir1,dir2))
我想知道是否有更好的方法来完成同样的任务(可能更短,更高效,更pythonic)?
答案 0 :(得分:3)
Python遵循哲学
要求宽恕比要求许可更好。
因此,如果leaf目录已经存在,您只需捕获抛出的异常,而不是检查List<?>
:
isdir
您还可以将字符串插值def Test():
main_dir = ["FolderA", "FolderB"]
common_dir = ["SubFolder1", "SubFolder2", "SubFolder3"]
for dir1 in main_dir:
for dir2 in common_dir:
try: os.makedirs(os.path.join(dir1,dir2))
except OSError: pass
替换为"%s/%s" %(dir1,dir2)
另一种更简洁的方法是使用笛卡尔积而不是使用两个嵌套的for循环:
os.path.join(dir1, dir2)
答案 1 :(得分:3)
怎么样:
{ "_id" : [ 235, 666 ], "total" : 1 }
{ "_id" : [ 235 ], "total" : 1 }
如果我们担心import os
from itertools import starmap
def Test():
main_dir = ["FolderA", "FolderB"]
common_dir = ["SubFolder1", "SubFolder2", "SubFolder3"]
map(os.makedirs, starmap(os.path.join, zip(main_dir, common_dir)))
抛出错误:
os.makedirs()