我正在使用Python编写一个文件,我希望它被放置在一个特定的路径上。
也就是说:我如何检查文件夹是否存在,与其父母一起?如果路线上缺少文件夹,我如何创建它们?
我正在使用Python编写一个文件,我希望它被放置在一个特定的路径上。
也就是说:我如何检查文件夹是否存在,与其父母一起?如果路线上缺少文件夹,我如何创建它们?
当前回答
为什么不使用子过程模块,如果运行支持命令 mkdir 的机器与 -p 选项? 在 Python 2.7 和 Python 3.6 上工作
from subprocess import call
call(['mkdir', '-p', 'path1/path2/path3'])
应该在大多数系统上进行技巧。
在移动性不在乎的情况下(例如,使用 docker)的解决方案是干净的2行,你也不需要添加逻辑来检查是否有目录。
如果您需要错误处理:
from subprocess import check_call
try:
check_call(['mkdir', '-p', 'path1/path2/path3'])
except:
handle...
其他回答
相关的 Python 文档建议使用 EAFP 编码风格(更容易要求宽恕而不是允许)。
try:
os.makedirs(path)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
else:
print "\nBE CAREFUL! Directory %s already exists." % path
比替代品更好
if not os.path.exists(path):
os.makedirs(path)
else:
print "\nBE CAREFUL! Directory %s already exists." % path
文档表明这一点正是因为在这个问题上讨论的竞赛条件。 此外,正如其他人在这里提到的那样,在询问一次而不是两次操作系统时,有一个性能优势。 最后,在某些情况下,潜在地提前提出的论点 - 当开发人员知道应用程序正在运行的环境时 - 只能在
即使在這種情況下,這是一個糟糕的做法,可能會導致漫長的無用解散。 例如,我們設定的許可證的目錄不應該讓我們與印刷許可證是適當設定的我們的目的。 一個母目錄可以與其他許可證。
在 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.
在 Python3 中,OS.makedirs 支持设置 exist_ok. 默认设置是 False,这意味着如果目标目录已经存在,则将升级到 OSError. 通过设置 exist_ok 到 True,则将被忽略到 OSError(目录存在)并不会创建目录。
os.makedirs(path,exist_ok=True)
在 Python2 中, os.makedirs 不支持 exist_ok 设置. 在 heikki-toivonen 的答案中,您可以使用方法:
import os
import errno
def make_sure_path_exists(path):
try:
os.makedirs(path)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
我使用os.path.exists(),这里是一个Python 3脚本可以用来检查是否有一个目录,创建一个如果它不存在,并删除它如果它存在(如果需要)。
它鼓励用户输入目录,并且可以轻松修改。
使用此命令检查并创建 dir
if not os.path.isdir(test_img_dir):
os.mkdir(test_img_dir)