对于您的第一点,如果您尝试创建与操作系统无关的文件夹,那么我倾向于使用os.path.join文件夹/文件路径:
import os
path = os.path.join(os.getcwd(), 'path', 'to', 'folder')
os.makedirs(path)
由于 windows 和 *nix 有不同的路径分隔符。
根据文档:
超级mkdir;创建一个叶子目录和所有中间目录。像 mkdir 一样工作,除了如果不存在任何中间路径段(不仅仅是最右边的)将被创建。这是递归的。
with open(file, 'w')将创建一个文件,而不是文件夹。因此,您需要在打开文件之前保留您的 makedirs 调用。OSError如果文件夹已经存在,您将需要捕获:
import os
folders = os.path.join('some', 'folder')
os.makedirs(folders)
os.makedirs(folders)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mm92400/anaconda3/envs/27testenv/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 17] File exists: 'some/folder'
所以在你的生产代码中,这看起来像:
try:
os.makedirs(folders)
except OSError:
# do some logging
print('folder exists!')
最后,如果可以的话,我强烈建议切换到 python3,python2 将在今年年底达到生命的尽头。这个的 python3 实现要干净得多,因为它可以使用exist_ok标志:
超级mkdir;创建一个叶子目录和所有中间目录。像 mkdir 一样工作,除了如果不存在任何中间路径段(不仅仅是最右边的)将被创建。如果目标目录已经存在,如果exist_ok 为False,则引发OSError。否则不会引发异常。这是递归的。
所以你的代码最终看起来像:
# python3 version
import os
folders = os.path.join('some', 'folder')
os.makedirs(folders, exist_ok=True)
os.makedirs(folders, exist_ok=True)
否定对任何检查或 的需要try/except,尽管try/except可以将其视为更明确一点