python - Python 2.7如何高效优雅的创建目录和子目录?

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

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

  1. 检查是否有同名目录。如果是,请跳过。
  2. 如果没有,则在该目录下创建目录和预定义的子目录。

这是我使用 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)?

最佳答案

Python遵循哲学

It is better to ask for forgiveness than to ask for permission.

因此,与其检查 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) 替换为 os.path.join(dir1, dir2)

另一种更简洁的方法是做笛卡尔积而不是使用两个嵌套的 for 循环:

for dir1, dir2 in itertools.product(main_dir, common_dir):
    try: os.makedirs(os.path.join(dir1,dir2))
    except OSError: pass

关于python - Python 2.7如何高效优雅的创建目录和子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837089/

相关文章:

python - 如何迭代创建嵌套字典?

python - 在 Python 3.5 中使用 PyEval_EvalCode

python - opencv python中的特定像素如何透明?

javascript - 替换或删除完整字符串中包含单词中@temp之前的字符

Flask - 动态创建文件并将其上传到文件夹中

java - Groovy - 如何在 Groovy 中压缩整个目录?

python - 如何使用 Python 连接到 Microsoft Dynamics CRM 服务器?

python - Django 中的正则表达式用于配置 url 模式

file - 如何找到批处理文件的当前目录,然后将其用作路径?

python - 如何优雅地停止python unittest?