从字符串动态创建文件夹树

时间:2011-01-20 22:21:06

标签: python django

我正在编写代码,我将根据从数据库中检索到的字符串创建文件夹和子文件夹。它是动态的;它可以是一个级别,两个级别或十个。

我正在尝试用斜线替换点并创建正确的树,但下面的代码不能完成这项工作:

for x in i.publish_app.split('.'):
    if not os.path.isdir(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT) + x + '/'):
        os.mkdir(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT) + x + '/')

i.publish_app例如是'apps.name.name.another.name'

我该怎么做?

4 个答案:

答案 0 :(得分:15)

os.makedirs(path[, mode])
  

递归目录创建功能。   像mkdir(),但所有   需要中级目录   包含叶子目录。加薪   叶子的错误异常   目录已存在或不可存在   创建。默认模式为0777   (八进制)。在某些系统上,模式是   忽略。在哪里使用,当前   首先掩盖umask值。

直接来自the docs

答案 1 :(得分:4)

使用os.makedirs(),如果您需要mkdir -p,可以使用example

答案 2 :(得分:1)

你为什么不这样做:

os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT,x,"")

(最后,""是在最后添加\/,但我认为您不需要它来制作目录)

答案 3 :(得分:0)

从Python 3.5开始,有pathlib.mkdir

from pathlib import Path
path = Path(settings.MEDIA_ROOT)
nested_path = path / ( PATH_CSS_DB_OUT + x)
nested_path.mkdir(parents=True, exist_ok=True) 

这将以递归方式创建目录,并且如果目录已经存在,则不会引发异常。

(就像os.makedirs从Python 3.2开始得到exist_ok标志一样,例如os.makedirs(path, exist_ok=True)