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

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


当前回答

如果你考虑下列事项:

os.path.isdir('/tmp/dirname')

这意味着一个目录(路径)存在,而且是一个目录,所以对我来说,这就是我所需要的,所以我可以确保它是文件夹(不是文件)并且存在。

其他回答

你可以使用Megath。

# Create a directory and any missing ancestor directories. 
# If the directory already exists, do nothing.

from distutils.dir_util import mkpath
mkpath("test")    

请注意,它也将创建祖先目录。

它适用于Python 2和3。

检查是否有一个目录,并在需要时创建它。

if not os.path.exists(d):
    os.makedirs(d)

import errno
try:
    os.makedirs(d)
except OSError as exception:
    if exception.errno != errno.EEXIST:
        raise

import tempfile

d = tempfile.mkdtemp()

有一个新的路径对象(如3.4)与许多方法,你会想使用路径 - 其中一个是 mkdir。

首先,相关进口:

from pathlib import Path
import tempfile

我们不需要处理 os.path.join 现在 - 只是加入路径部分与一个 /:

directory = Path(tempfile.gettempdir()) / 'sodata'

然后我无力地确保目录存在 - 存在_ok 论点在 Python 3.5 中出现:

directory.mkdir(exist_ok=True)

下面是文档的相关部分:

如果 exist_ok 是真实的,FileExistsError 例外将被忽略(与 POSIX mkdir -p 命令相同的行为),但只有如果最后的路径组件不是现有的非指南文件。

todays_file = directory / str(datetime.datetime.utcnow().date())
if todays_file.exists():
    logger.info("todays_file exists: " + str(todays_file))
    df = pd.read_json(str(todays_file))

路径对象必须在等待路径可以使用的其他API之前被强迫到Str。

也许Pandas应该更新以接受抽象基础类,os.PathLike的例子。

我个人建议您使用 os.path.isdir() 测试而不是 os.path.exists()。

>>> os.path.exists('/tmp/dirname')
True
>>> os.path.exists('/tmp/dirname/filename.etc')
True
>>> os.path.isdir('/tmp/dirname/filename.etc')
False
>>> os.path.isdir('/tmp/fakedirname')
False

如果你有:

>>> directory = raw_input(":: ")

一个愚蠢的用户输入:

:: /tmp/dirname/filename.etc

... 您将以 filename.etc 命名的目录结束,当您将该论点转移到 os.makedirs(),如果您使用 os.path.exists()进行测试。

在 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')