我正在使用Python编写一个文件,我希望它被放置在一个特定的路径上。

也就是说:我如何检查文件夹是否存在,与其父母一起?如果路线上缺少文件夹,我如何创建它们?


当前回答

在 Python ≥ 3.5 上使用 pathlib.Path.mkdir:

from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)

对于旧版本的Python,我看到两个答案有良好的品质,每一个有一个小错误,所以我会给我的答案:

import os
if not os.path.exists(directory):
    os.makedirs(directory)

正如评论和其他地方所指出的那样,有一个赛事状态 - 如果目录在 os.path.exists 和 os.makedirs 呼叫之间创建, os.makedirs 会失败 OSError. 不幸的是,包装捕捉 OSError 和继续不是虚假的,因为它会忽略由于其他因素创建目录的失败,如不够的许可,完整的磁盘等。

import os, errno

try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

否则,可能有第二个 os.path.exists,但假设另一个创建了目录后第一次检查,然后删除它之前的第二个 - 我们仍然可以被误导。

现代版本的Python改进这个代码相当一点,两者都通过曝光FileExistsError(在3.3+)。

try:
    os.makedirs("path/to/directory")
except FileExistsError:
    # directory already exists
    pass

...和允许一个关键词论点给os.makedirs称为 exist_ok(在3.2+)。

os.makedirs("path/to/directory", exist_ok=True)  # succeeds even if directory exists.

其他回答

我下载了下面的文章,但这不是完全愚蠢的。

import os

dirname = 'create/me'

try:
    os.makedirs(dirname)
except OSError:
    if os.path.exists(dirname):
        # We are nearly safe
        pass
    else:
        # There was an error on creation, so make sure we know about it
        raise

如今,正如我所说的那样,这不是真正的愚蠢,因为我们有可能无法在那个时期创建目录,还有另一个创建过程。

在 Python 3.4 中,您还可以使用全新 pathlib 模块:

from pathlib import Path
path = Path("/my/directory/filename.txt")
try:
    if not path.parent.exists():
        path.parent.mkdir(parents=True)
except OSError:
    # handle error; you can also catch specific errors like
    # FileExistsError and so on.

在您的程序/项目的输入点上拨打 Create_dir() 函数。

import os

def create_dir(directory):
    if not os.path.exists(directory):
        print('Creating Directory '+directory)
        os.makedirs(directory)

create_dir('Project directory')

我使用os.path.exists(),这里是一个Python 3脚本可以用来检查是否有一个目录,创建一个如果它不存在,并删除它如果它存在(如果需要)。

它鼓励用户输入目录,并且可以轻松修改。

如果您正在写一个文件到一个变量路径,您可以在文件路径上使用此文件,以确保母目录创建。

from pathlib import Path

path_to_file = Path("zero/or/more/directories/file.ext")
parent_directory_of_file = path_to_file.parent
parent_directory_of_file.mkdir(parents=True, exist_ok=True)

工作,即使 path_to_file 是 file.ext (零目录深)。

查看 pathlib.PurePath.parent 和 pathlib.Path.mkdir。