os.path通用路径名操作详解(2)Python文件和目录访问模块(必读进阶Python教程)(参考资料)
该模块在路径名上实现了一些有用的功能。要读取或写入文件open()
,请参阅os
模块以及访问文件系统 。路径参数可以作为字符串或字节传递。鼓励应用程序将文件名表示为(Unicode)字符串。遗憾的是,某些文件名在Unix上可能无法表示为字符串,因此需要在Unix上支持任意文件名的应用程序应使用字节对象来表示路径名。反之亦然,使用字节对象不能代表Windows上的所有文件名(在标准mbcs
编码中),因此Windows应用程序应使用字符串对象来访问所有文件。
与unix shell不同,Python不进行任何自动路径扩展。当应用程序需要类似shell的路径扩展时expanduser()
,expandvars()
可以显式调用诸如和之类的函数。(另见glob
模块。)
也可以看看
该pathlib
模块提供高级路径对象。
注意
所有这些函数都只接受字节或仅接受字符串对象作为参数。如果返回路径或文件名,则结果是相同类型的对象。
注意
由于不同的操作系统具有不同的路径名约定,因此标准库中有该模块的多个版本。该 os.path
模块始终是适用于Python运行的操作系统的路径模块,因此可用于本地路径。但是,如果要操作始终采用不同格式之一的路径,也可以导入和使用单个模块。它们都具有相同的界面:
posixpath
对于UNIX风格的路径ntpath
对于Windows路径macpath
对于旧式MacOS路径
os.path.
abspath
(路径)- 返回路径名路径的规范化绝对化版本。在大多数平台上,这相当于调用函数
normpath()
如下:。normpath(join(os.getcwd(), path))
在版本3.6中更改:接受类似路径的对象。
os.path.
basename
(路径)- 返回路径名路径的基本名称。这是通过将路径传递给函数返回的对的第二个元素
split()
。请注意,此函数的结果与Unix basename程序不同; 其中基名为'/foo/bar/'
回报'bar'
,该basename()
函数返回一个空字符串(''
)。在版本3.6中更改:接受类似路径的对象。
os.path.
commonpath
(路径)- 返回序列路径中每个路径名的最长公共子 路径。如果路径包含绝对路径名和相对路径名,或路径为空,则引发ValueError 。与
commonprefix()
此不同,它返回一个有效的路径。可用性:Unix,Windows。
版本3.5中的新功能。
在版本3.6中更改:接受一系列类似路径的对象。
os.path.
commonprefix
(列表)- 返回最长路径前缀(逐个字符),它是列表中所有路径的前缀 。如果list为空,则返回空字符串(
''
)。注意
此函数可能返回无效路径,因为它一次只能处理一个字符。要获得有效路径,请参阅
commonpath()
。>>> >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib']) '/usr/l' >>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) '/usr'
在版本3.6中更改:接受类似路径的对象。
os.path.
exists
(路径)- 返回
True
如果路径是指现有的路径或一个打开的文件描述符。False
损坏的符号链接的返回值。在某些平台上,False
如果未授予os.stat()
对所请求文件执行的权限,则此函数可能会返回,即使路径实际存在也是如此。在版本3.3中更改:path现在可以是一个整数:
True
如果它是一个打开的文件描述符,则返回,False
否则返回。在版本3.6中更改:接受类似路径的对象。
os.path.
lexists
(路径)True
如果path指向现有路径,则返回。True
损坏的符号链接的返回值。相当于exists()
缺乏的平台os.lstat()
。在版本3.6中更改:接受类似路径的对象。
os.path.
expanduser
(路径)- 在Unix和Windows上,返回带有初始组件
~
或~user
由该用户主目录替换的参数。在Unix上,初始化
~
由环境变量替换HOME
如果设置了; 否则,通过内置模块在密码目录中查找当前用户的主目录pwd
。~user
直接在密码目录中查找初始化。在Windows上,
HOME
和USERPROFILE
如果设置将被使用,否则将被组合使用HOMEPATH
和HOMEDRIVE
将会被使用。~user
通过从上面派生的创建的用户路径中剥离最后一个目录组件来处理初始化。如果扩展失败或者路径没有以波浪号开头,则路径将保持不变。
在版本3.6中更改:接受类似路径的对象。
os.path.
expandvars
(路径)- 返回扩展了环境变量的参数。表单的子字符串
$name
或${name}
由环境变量名称的值替换 。格式错误的变量名称和对不存在的变量的引用保持不变。在Windows上,
%name%
除了$name
和 之外还支持扩展${name}
。在版本3.6中更改:接受类似路径的对象。
os.path.
getatime
(路径)- 返回上次访问路径的时间。返回值是一个浮点数,给出了自纪元以来的秒数(参见
time
模块)。OSError
如果文件不存在或无法访问,则提升 。
os.path.
getmtime
(路径)- 返回上次修改路径的时间。返回值是一个浮点数,给出了自纪元以来的秒数(参见
time
模块)。OSError
如果文件不存在或无法访问,则提升。在版本3.6中更改:接受类似路径的对象。
os.path.
getctime
(路径)- 返回系统的ctime,在某些系统(如Unix)上是最后一次元数据更改的时间,而在其他系统(如Windows)上则是路径的创建时间。返回值是一个数字,给出了自纪元以来的秒数(参见
time
模块)。OSError
如果文件不存在或无法访问,则提升。在版本3.6中更改:接受类似路径的对象。
os.path.
getsize
(路径)- 返回路径的大小(以字节为单位)。
OSError
如果文件不存在或无法访问,则提升。在版本3.6中更改:接受类似路径的对象。
os.path.
isabs
(路径)True
如果path是绝对路径名,则返回。在Unix上,这意味着它以斜杠开头,在Windows上以切断潜在驱动器号后的(反向)斜线开头。在版本3.6中更改:接受类似路径的对象。
os.path.
isfile
(路径)True
如果path是existing
常规文件,则返回。这是继符号链接,这样既islink()
并且isfile()
可以为相同的路径是正确的。在版本3.6中更改:接受类似路径的对象。
os.path.
isdir
(路径)True
如果path是existing
目录,则返回。这是继符号链接,这样既islink()
并且isdir()
可以为相同的路径是正确的。在版本3.6中更改:接受类似路径的对象。
os.path.
islink
(路径)True
如果path引用existing
作为符号链接的目录条目,则返回。总是False
如果Python运行时不支持符号链接。在版本3.6中更改:接受类似路径的对象。
os.path.
ismount
(路径)True
如果路径名路径是装入点,则返回:文件系统中已装入其他文件系统的点。在POSIX上,该函数检查路径的父节点是否在与路径不同的设备上,或者路径是否指向同一设备上的同一个节点 – 这应该检测所有Unix和POSIX变体的安装点。它无法可靠地检测同一文件系统上的绑定挂载。在Windows上,驱动器盘符根和共享UNC始终是挂载点,并且对于任何其他路径,将调用它以查看它是否与输入路径不同。path
/..
path
/..
GetVolumePathName
3.4版中的新增功能:支持在Windows上检测非root挂载点。
在版本3.6中更改:接受类似路径的对象。
os.path.
join
(路径,路径)- 智能地加入一个或多个路径组件。返回值是路径和*路径的任何成员的串联,在
os.sep
除了最后一个之外的每个非空部分之后只有一个目录separator(),这意味着如果最后一部分为空,结果将仅在分隔符中结束。如果组件是绝对路径,则抛弃所有先前组件并从绝对路径组件继续连接。在Windows上,
r'\foo'
遇到绝对路径组件(例如)时,不会重置驱动器号。如果组件包含驱动器号,则会丢弃所有先前的组件并重置驱动器号。请注意,由于每个驱动器都有一个当前目录, 表示相对于drive ()上当前目录的路径,而不是。os.path.join("c:", "foo")
C:
c:foo
c:\foo
改变在3.6版:接受一个路径状物体为路径和路径。
os.path.
normcase
(路径)- 规范化路径名的大小写。在Unix和Mac OS X上,这将返回路径不变; 在不区分大小写的文件系统上,它将路径转换为小写。在Windows上,它还将正斜杠转换为反斜杠。
TypeError
如果路径类型不是str
或bytes
(直接或间接通过os.PathLike
接口),则引发a 。在版本3.6中更改:接受类似路径的对象。
os.path.
normpath
(路径)- 通过折叠冗余分离器和上一级引用正常化的路径名,这样
A//B
,A/B/
,A/./B
和A/foo/../B
一切变得A/B
。此字符串操作可能会更改包含符号链接的路径的含义。在Windows上,它将正斜杠转换为反斜杠。要规范化案例,请使用normcase()
。在版本3.6中更改:接受类似路径的对象。
os.path.
realpath
(路径)- 返回指定文件名的规范路径,消除路径中遇到的任何符号链接(如果操作系统支持它们)。
在版本3.6中更改:接受类似路径的对象。
os.path.
relpath
(path,start = os.curdir )- 将相对文件路径从当前目录或可选的启动目录返回到路径。这是路径计算:不访问文件系统以确认路径或 启动的存在或性质。
开始默认为
os.curdir
。可用性:Unix,Windows。
在版本3.6中更改:接受类似路径的对象。
os.path.
samefile
(path1,path2 )- 返回
True
如果两个路径参数指的是同一个文件或目录。这由设备编号和索引节点编号决定,如果os.stat()
对任一路径名的调用失败,则会引发异常。可用性:Unix,Windows。
在3.2版中更改:添加了Windows支持。
版本3.4中已更改: Windows现在使用与所有其他平台相同的实现。
在版本3.6中更改:接受类似路径的对象。
os.path.
sameopenfile
(fp1,fp2 )- 返回
True
如果文件描述符FP1和FP2指的是同一个文件。可用性:Unix,Windows。
在3.2版中更改:添加了Windows支持。
在版本3.6中更改:接受类似路径的对象。
os.path.
samestat
(stat1,stat2 )- 返回
True
如果统计的元组STAT1和STAT2指的是同一个文件。可能已经返回这些结构的os.fstat()
,os.lstat()
或os.stat()
。此函数实现samefile()
和使用的基础比较sameopenfile()
。可用性:Unix,Windows。
版本3.4中已更改:添加了Windows支持。
在版本3.6中更改:接受类似路径的对象。
os.path.
split
(路径)- 将路径名路径拆分为一对,其中tail是最后一个路径名组件,head是导致该路径名的所有内容。在 尾部部分永远不会包含一个斜杠; 如果path以斜线结尾,则tail 将为空。如果路径中没有斜杠,则head将为空。如果 path为空,则head和tail都为空。尾部斜杠从头部剥离,除非它是根(仅一个或多个斜杠)。在所有情况下,返回与路径相同位置的路径
(head, tail)
join(head, tail)
(但字符串可能不同)。另见功能dirname()
和basename()
。在版本3.6中更改:接受类似路径的对象。
os.path.
splitdrive
(路径)- 将路径名路径拆分为一对,其中drive是挂载点或空字符串。在不使用驱动器规格的系统上,驱动器将始终为空字符串。在所有情况下,将与路径相同。
(drive, tail)
drive + tail
在Windows上,将路径名拆分为驱动器/ UNC共享点和相对路径。
如果路径包含驱动器号,则驱动器将包含所有内容,包括冒号。例如
splitdrive("c:/dir")
回归("c:","/dir")
如果路径包含UNC路径,则驱动器将包含主机名和共享,但不包括第四个分隔符。例如
splitdrive("//host/computer/dir")
回归("//host/computer", "/dir")
在版本3.6中更改:接受类似路径的对象。
os.path.
splitext
(路径)- 分裂路径名路径成一对 ,使得,和分机是空的或用一个周期开始,并且包含至多一个周期。基本名称的前导句点被忽略; 回报 。
(root, ext)
root + ext == path
splitext('.cshrc')
('.cshrc', '')
在版本3.6中更改:接受类似路径的对象。
os.path.
supports_unicode_filenames
True
如果任意Unicode字符串可以用作文件名(在文件系统强加的限制内)。