在跳过现有目录的同时在python中递归创建目录

时间:2015-06-19 18:38:13

标签: python directory

我正在尝试创建以下目录:

/autofs/homes/008/gwarner/test1/test2/

/autofs/homes/008/gwarner/test1/test3/

/autofs/homes/008/gwarner/已经存在且我没有/autofs/homes/008/的所有权限。当我尝试跑步时:

dir = '/autofs/homes/008/gwarner/test/test1/test4/test5/'

for root, dirs, files in os.walk(dir, topdown = True):

    print root

我根本没有输出。

2 个答案:

答案 0 :(得分:1)

我认为您已尝试过os.makedirs(),对吧?也许我误解了你的要求,但你说你想:

  

递归创建目录

os.makedirs()的文档以:

开头
  

递归目录创建功能。

答案 1 :(得分:0)

您可以使用os.path.exists模块。

我会小心并使用os.path.isdir和os.path.exists来检查路径是否是一个目录,然后在覆盖路径之前尝试在目录和os.path.exists中写入。

例如:

>>> import os
>>> os.path.isdir('/home')
True
>>> os.path.isdir('/usr/bin')
True
>>> os.path.isdir('/usr/bin/python')
False
# writing a single, non-recursive path
>>> if not os.path.exists('/home/cinnamon'):
...     os.mkdir('/home/cinnamon')
# writing a single, recursive path
>>> if not os.path.exists('/home/alex/is/making/a/really/long/path'):
...     os.makedirs('/home/alex/is/making/a/really/long/path')
# now to script the latter
>>> paths = ['/home/alex/path/one', ...]
>>> for path in paths:
>>>     if not os.path.exists(path):
>>>        os.makedirs(path)

这样,您不会覆盖存在的任何内容,在写入目录之前检查是否有某个目录。根据设计,如果路径存在,系统会抛出OSError,因为它不知道你想要如何处理它。

是否要覆盖路径(shutil.rmtree),是否要存储路径已设置,或者是否要跳过它?这是由编码员决定的。