如何在Python 2.7中高效优雅地创建目录和子目录?

时间:2015-06-15 03:51:57

标签: python python-2.7 directory directory-structure python-os

我正在尝试在PC中的特定位置创建一堆目录和子目录。我的流程是这样的:

  1. 检查是否有任何目录具有相同的目录名称。如果是,请跳过。
  2. 如果没有,请在该目录下创建目录和预定义的子目录。
  3. 这是我使用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)?

2 个答案:

答案 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()