我在视频教程中看到过这个python片段,它检查列出的项目是目录还是文件:
for item in os.listdir("."):
if os.path.isfile(item):
# do something
elif os.path.isdir(item):
# do somethin
else:
# What is this case ?!
是否有可能命中else语句?
答案 0 :(得分:4)
正如@sisoft所说,简单的答案是肯定的:确实存在支持文件和目录以外的文件类型的文件系统。
如果您感兴趣,较长的答案是文件系统支持的类型与文件系统的差别很大。 UNIX将大量内容视为一个'文件' (意思是文件系统中的一个对象),因此有很多类型。 Windows有一组更受限制的对象(我相信文件,目录和链接(没有来源))
文件系统的POSIX规范(由许多文件系统实现)没有指定它必须支持的对象(source)。
通常,文件系统是一个相当开放的术语,可以引用任何对象存储。它存储的对象可以是任何东西。
如果您想了解有关文件系统的更多信息,可以在Operating Systems中找到一个很好的章节,它提供了一个易于理解的介绍。
答案 1 :(得分:2)
是。还有其他类型,如管道,套接字,设备节点。
例如,对于来自isfile()
的大多数文件,isdir()
和/dev
都会返回False。
答案 2 :(得分:2)
是否有可能命中else语句?
您的代码片段使用文件和目录的狭义定义:os.stat(path)
(follows symlinks) is successful and either S_ISREG
or S_ISDIR
are true correspondingly。
else
子句。
POSIX defines the following marcos:
S_ISBLK(m)
Test for a block special file.
S_ISCHR(m)
Test for a character special file.
S_ISDIR(m)
Test for a directory.
S_ISFIFO(m)
Test for a pipe or FIFO special file.
S_ISREG(m)
Test for a regular file.
S_ISLNK(m)
Test for a symbolic link.
S_ISSOCK(m)
Test for a socket.
即,除了常规文件和目录外,还可能有套接字,符号链接,管道,块/字符设备:
>>> import os
>>> import stat
>>> stat.S_ISBLK(os.stat('/dev/sda').st_mode)
True
可能存在仅对特定文件系统有意义的其他对象。