在os
Python模块中,有一种方法可以查找目录是否存在,例如:
>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode
True/False
os.stat
从文件中分辨目录的方法。OSError
无论路径是文件还是目录,当路径无效时都会引发。同样,检查后的任何代码也容易受到竞争条件的影响。
在os
Python模块中,有一种方法可以查找目录是否存在,例如:
>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode
True/False
os.stat
从文件中分辨目录的方法。OSError
无论路径是文件还是目录,当路径无效时都会引发。同样,检查后的任何代码也容易受到竞争条件的影响。
Answers:
您正在寻找os.path.isdir
,还是os.path.exists
不在乎它是文件还是目录。
例:
import os
print(os.path.isdir("/home/el"))
print(os.path.exists("/home/el/myfile.txt"))
existing = filter(os.path.isdir(['/lib', '/usr/lib', '/usr/local/lib'])
map
,但是通常情况下,您可以使用参数和括号来调用函数。另外,您的示例中有一些错字。想必你是说filter(os.path.isdir, ['/lib', '/usr/lib', '/usr/local/lib'])
。
os.path.isfile(path)
如果您只关心它是否是一个文件,那就可以了。
蟒3.4引入的pathlib
模块到标准库,它提供了一个面向对象的方法来处理的文件系统的路径。对象的is_dir()
和exists()
方法Path
可用于回答以下问题:
In [1]: from pathlib import Path
In [2]: p = Path('/usr')
In [3]: p.exists()
Out[3]: True
In [4]: p.is_dir()
Out[4]: True
路径(和字符串)可以与/
运算符连接在一起:
In [5]: q = p / 'bin' / 'vim'
In [6]: q
Out[6]: PosixPath('/usr/bin/vim')
In [7]: q.exists()
Out[7]: True
In [8]: q.is_dir()
Out[8]: False
也可以通过PyPi上的pathlib2模块在 Python 2.7 上使用Pathlib。
p / 'bin' / 'vim'
?”
是的,请使用os.path.exists()
。
os.path.isdir
将实现这一目标。
我们可以检查2个内置函数
os.path.isdir("directory")
它将布尔值为true,指定的目录可用。
os.path.exists("directoryorfile")
如果指定的目录或文件可用,它将使boolead为true。
检查路径是否为目录;
os.path.isdir("directorypath")
如果路径为目录,则将为布尔值true
是的,使用os.path.isdir(path)
#You can also check it get help for you
if not os.path.isdir('mydir'):
print('new directry has been created')
os.system('mkdir mydir')
os.makedirs('mydir')
而不是os.system(...)
有一个方便的Unipath
模块。
>>> from unipath import Path
>>>
>>> Path('/var/log').exists()
True
>>> Path('/var/log').isdir()
True
您可能需要的其他相关事项:
>>> Path('/var/log/system.log').parent
Path('/var/log')
>>> Path('/var/log/system.log').ancestor(2)
Path('/var')
>>> Path('/var/log/system.log').listdir()
[Path('/var/foo'), Path('/var/bar')]
>>> (Path('/var/log') + '/system.log').isfile()
True
您可以使用pip安装它:
$ pip3 install unipath
它类似于内置的pathlib
。不同之处在于,它将每个路径都视为字符串(Path
是的子类str
),因此,如果某些函数需要字符串,则可以轻松地将其传递给Path
对象,而无需将其转换为字符串。
例如,这在Django和下非常有用settings.py
:
# settings.py
BASE_DIR = Path(__file__).ancestor(2)
STATIC_ROOT = BASE_DIR + '/tmp/static'
Source,如果它仍在SO上。
================================================== ===================
在Python≥3.5上,使用pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
对于旧版本的Python,我看到两个质量很好的答案,每个都有一个小缺陷,因此我将对此进行说明:
试试看os.path.exists
,然后考虑os.makedirs
创建。
import os
if not os.path.exists(directory):
os.makedirs(directory)
如注释和其他地方所述,存在竞争条件–如果在os.path.exists
和os.makedirs
调用之间创建目录,os.makedirs
则将失败并显示OSError
。不幸的是,毯式捕获OSError
和继续操作并非万无一失,因为它将忽略由于其他因素(例如权限不足,磁盘已满等)而导致的目录创建失败。
一种选择是捕获OSError
并检查嵌入式错误代码(请参阅是否存在从Python的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
dirpath = "<dirpath>" # Replace the "<dirpath>" with actual directory path.
if os.path.exists(dirpath):
print("Directory exist")
else: #this is optional if you want to create a directory if doesn't exist.
os.mkdir(dirpath):
print("Directory created")
os.stat
,以查看该目录是否同时存在并且同时是一个目录。