我正在使用Python编写一个文件,我希望它被放置在一个特定的路径上。
也就是说:我如何检查文件夹是否存在,与其父母一起?如果路线上缺少文件夹,我如何创建它们?
我正在使用Python编写一个文件,我希望它被放置在一个特定的路径上。
也就是说:我如何检查文件夹是否存在,与其父母一起?如果路线上缺少文件夹,我如何创建它们?
当前回答
使用此命令检查并创建 dir
if not os.path.isdir(test_img_dir):
os.mkdir(test_img_dir)
其他回答
如果你考虑下列事项:
os.path.isdir('/tmp/dirname')
这意味着一个目录(路径)存在,而且是一个目录,所以对我来说,这就是我所需要的,所以我可以确保它是文件夹(不是文件)并且存在。
我下载了下面的文章,但这不是完全愚蠢的。
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
如今,正如我所说的那样,这不是真正的愚蠢,因为我们有可能无法在那个时期创建目录,还有另一个创建过程。
对于单线解决方案,您可以使用 IPython.utils.path.ensure_dir_exists():
from IPython.utils.path import ensure_dir_exists
ensure_dir_exists(dir)
从文档:确保一个目录存在,如果它不存在,试着创建它,并保护它免受一个赛车状态,如果另一个过程正在做同样的事情。
IPython 是一个扩展包,而不是标准图书馆的一部分。
import pathlib
pathlib.Path('/my/directory').mkdir(parents=True, exist_ok=True)
pathlib.Path.mkdir 如上所述,重复创建目录,如果目录已经存在,则不会产生例外。
Python 3.2 以上:
使用Pathlib:
使用我们:
import os
os.makedirs(path, exist_ok=True)
使用Pathlib:
使用我们:
import os
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise
请注意,捕获例外和使用 errno 是有限的用途,因为 OSError: [Errno 17] 文件存在,即 errno.EEXIST,为文件和目录上传。
替代品:
import distutils.dir_util
distutils.dir_util.mkpath(path)
换句话说,如果您使用它创建一个目录,然后从内部或外部的目录删除,然后再使用目录重新创建相同的目录,目录将简单地沉默地使用其未成效的隐藏信息之前创建的目录,并将不起作用。
至于目录模式,请参考文档,如果您对此感兴趣。
相关的 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
文档表明这一点正是因为在这个问题上讨论的竞赛条件。 此外,正如其他人在这里提到的那样,在询问一次而不是两次操作系统时,有一个性能优势。 最后,在某些情况下,潜在地提前提出的论点 - 当开发人员知道应用程序正在运行的环境时 - 只能在
即使在這種情況下,這是一個糟糕的做法,可能會導致漫長的無用解散。 例如,我們設定的許可證的目錄不應該讓我們與印刷許可證是適當設定的我們的目的。 一個母目錄可以與其他許可證。