优雅的方式使所有的dirs在一条路上

时间:2011-03-06 13:32:27

标签: python path

以下是四条路径:

p1=r'\foo\bar\foobar.txt'
p2=r'\foo\bar\foo\foo\foobar.txt'
p3=r'\foo\bar\foo\foo2\foobar.txt'
p4=r'\foo2\bar\foo\foo\foobar.txt'

驱动器上可能存在也可能不存在目录。在每条路径中创建目录最优雅的方法是什么?

我在考虑在循环中使用os.path.split(),并使用os.path.exists检查目录,但我不知道有更好的方法。

3 个答案:

答案 0 :(得分:46)

您正在寻找符合您需要的os.makedirs()

文档说明:

  

递归目录创建功能。   像mkdir(),但所有   需要中级目录   包含叶子目录。加薪   叶子的错误异常   目录已存在或不可存在   创建

因为如果叶子目录已经存在,它会失败,你需要在调用os.makedirs()之前测试是否存在。

答案 1 :(得分:13)

在Python 3.6+上你可以这样做:

import pathlib

path = pathlib.Path(p4)
path.parent.mkdir(parents=True, exist_ok=True)

答案 2 :(得分:0)

在POSIX系统中构建路径的简单方法。假设您的路径类似于:// file generate-rough-svg.js const { DOMImplementation, XMLSerializer } = require('xmldom'); const xmlSerializer = new XMLSerializer(); const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null); const rough = require('roughjs'); const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); const rc = rough.svg(svg); var data = [[40, 20], [140, 30], [100, 130]] svg.appendChild(rc.polygon(data)) let xml = xmlSerializer.serializeToString(svg); console.log(xml) ,其中node generate-rough-svg.js > image.svg dirPath = '../foo/bar'都不存在:

foo