我正在编写代码,我将根据从数据库中检索到的字符串创建文件夹和子文件夹。它是动态的;它可以是一个级别,两个级别或十个。
我正在尝试用斜线替换点并创建正确的树,但下面的代码不能完成这项工作:
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'
。
我该怎么做?
答案 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)
)