11.2. os.path
— 路径操作¶
源码: Lib/posixpath.py (for POSIX), Lib/ntpath.py (for Windows NT), and Lib/macpath.py (for Macintosh)
这个模块实现了一些有关操作路径的函数。如果需要读取或写入文件请参见open()
, 如果要访问文件系统请参见 os
模块.路径参数可以作为字符串或字节传递。应用程序鼓励文件名称作为 (Unicode) 字符串表现。不幸的是,一些文件的名称可能不可以在 Unix 上表示为字符串,所以需要在 Unix 上支持任意文件的名称的应用程序应使用字节对象来表示路径名称。反之亦然,使用字节对象不能表示所有在 Windows 上文件的名称 (在标准 mbcs
编码),因此 Windows 应用程序应使用字符串对象来访问所有文件。
与unix shell不同的 是,Python 不做任何 自动 路径扩展。当应用程序希望shell-like路径扩展,可以显式调用函数,如 expanduser()
和 expandvars()
。(请参阅 glob
模块)。
请参见
pathlib
模块提供更高级别的路径对象。
注意
所有的这些功能接受仅以字节或只有字符串对象作为其参数。如果返回路径或文件的名称,则结果为相同类型的对象。
注意
由于不同的操作系统有不同的路径名称约定,标准库中有几个版本的这个模块。运行 Python得到的os.path
模块始终是适用于操作系统得路径模块,并因此可用于本地路径。然而,您也可以导入并使用单独的模块,如果你想要操作 总是 在一种不同格式的路径。他们都有相同的接口︰
posixpath
用于UNIX样式路径ntpath
用于Windows路径macpath
用于旧式MacOS路径
-
os.path.
abspath
(path)¶ 返回一个标准的绝对路径名 path.在大多数平台上,该函数等效于调用
normpath()
函数, 如下所示:normpath(join(os.getcwd(), path))
.
os.path.
basename
(path)¶返回 path 路径名的基的名称。这是通过将path参数传递给
split()
函数返回的第二个元素。Note that the result of this function is different from the Unix basename program; where basename for'/foo/bar/'
returns'bar'
, thebasename()
function returns an empty string (''
).
os.path.
commonpath
(paths)¶返回 paths参数中,所有路径序列中共有的最长的路径.如果 paths 即包含绝对路径又包含相对路径,或者 paths 为空将抛出ValueError.不同于
commonprefix()
函数, commonpath()返回一个有效的路径.可用性:Unix,Windows
版本3.5中的新功能。
os.path.
commonprefix
(list)¶返回列表中所有路径的前缀的最长路径前缀(逐个字符)。如果列表为空,则返回空字符串(
''
)。注意
此函数可能返回无效路径,因为它一次处理一个字符。要获取有效路径,请参阅
commonpath()
。>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib']) '/usr/l' >>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) '/usr'
os.path.
exists
(path)¶如果路径指向现有路径或打开的文件描述器,则返回
True
。如果是损坏的符号链接,则返回False
.在某些平台上,如果未授予在所请求的文件上执行os.stat()
的权限,此函数可能会返回False
,即使路径物理上确实是存在的。版本 3.3 中的更改︰现在,path 可以是一个整数︰ 返回
True
如果它是一个打开的文件描述符,否则为False
。
os.path.
lexists
(path)¶如果 path 指向现有的路径,则返回
True
。破碎的符号链接将返回True
。在缺少os.lstat()
的平台上等效于exists()
。
os.path.
expanduser
(path)¶在Unix和Windows上,返回以
~
或~user
为起始组件的参数替换为用户的主目录。在Unix上,如果设置了初始
~
,则替换为环境变量HOME
否则通过内建模块pwd
在密码目录中查找当前用户的主目录。在密码目录中直接查找初始~user
。在Windows上,如果设置,将使用
HOME
和USERPROFILE
,否则 t6 >HOMEPATH
和HOMEDRIVE
。通过从上面得到的创建的用户路径剥离最后一个目录组件来处理初始~user
。如果扩展失败或者参数path不是以~打头,则直接返回参数(path)。
os.path.
expandvars
(path)¶返回参数,其中的环境变量被扩展。形式
$name
或${name}
的子字符串由环境变量name的值替换。如果格式不正确或者引用了不存在的变量,则不进行替换(或者扩展)。在Windows上,除了
$name
和${name}
之外,还支持%name%
扩展。
os.path.
getatime
(path)¶返回 path的上次访问时间.返回值是一个数字,表示自纪元以来的秒数(参见
time
模块)。如果文件不存在或无法访问,则引发OSError
。如果
os.stat_float_times()
返回True
,则结果为浮点数。
os.path.
getmtime
(path)¶返回path的最后修改时间。返回值是一个数字,表示自纪元以来的秒数(参见
time
模块)。如果文件不存在或无法访问,则引发OSError
。如果
os.stat_float_times()
返回True
,则结果为浮点数。
os.path.
getctime
(path)¶返回系统的ctime,在某些系统(如Unix)上是最后元数据更改的时间,在其他系统(如Windows)上,是路径的创建时间。返回值是一个数字,表示自纪元以来的秒数(参见
时间
模块)。如果文件不存在或无法访问,则引发OSError
。
-
os.path.
isabs
(path)¶ 如果路径是绝对路径名,则返回
True
。在Unix上,这表示路径以/开始;在Windows上,这表示路径以\开始(在去掉可能的盘符后,如C:)。
os.path.
islink
(path)¶如果路径指的是符号链接的目录条目,则返回
True
。始终False
如果Python运行时不支持符号链接。
os.path.
ismount
(path)¶如果路径名路径是安装点,则返回
True
On POSIX, the function checks whether path‘s parent,path/..
, is on a different device than path, or whetherpath/..
and path point to the same i-node on the same device — this should detect mount points for all Unix and POSIX variants. 在Windows上,驱动器号根和共享UNC始终是安装点,并且调用任何其他路径GetVolumePathName
以查看它是否与输入路径不同。版本3.4中的新功能:支持在Windows上检测非根安装点。
os.path.
join
(path, *paths)¶将一个或多个路径正确地连接起来。返回值是路径和*路径的任何成员与每个非空的后面紧跟一个目录分隔符(
os.sep
)的连接部分,除了最后一个,意味着结果将只在分隔符结束,如果最后一部分为空。如果组件是绝对路径,则所有先前组件都将被丢弃,并且从绝对路径组件继续加入。在Windows上,遇到绝对路径组件(例如,
r'\foo'
)时,不会重置驱动器盘符。如果组件包含驱动器号,则所有以前的组件都将被丢弃,并且驱动器号被重置。请注意,由于每个驱动器都有一个当前目录,因此os.path.join(“c:”, “foo”) 驱动器
C:
(c:foo
)上的当前目录的路径,而不是c:\foo
。
os.path.
normcase
(path)¶标准化路径名的大小写。在Unix和Mac OS X上,这会返回路径不变;在不区分大小写的文件系统上,它将路径转换为小写。在Windows上,还会将斜线转换成反斜线。如果路径的类型不是
str
或bytes
,则引发TypeError。
os.path.
normpath
(path)¶通过折叠冗余分隔符和上级引用来归一化路径名,以使
A//B
,A/B/
,A/./B
和A/foo/../B
都变为A/B
。该字符串操作可能改变包含符号链接的路径的含义。在Windows上,还会将斜线转换成反斜线。要规范化情况,请使用normcase()
。
os.path.
realpath
(path)¶返回指定的文件名的规范名字,并消除路径中遇到的任何符号链接(如果操作系统支持的话)。
os.path.
relpath
(path, start=os.curdir)¶返回自当前目录或者可选的start 目录的 path相对文件路径。这是一个路径计算:不访问文件系统以确认路径或开始的存在或本质。
开始默认为
os.curdir
。可用性:Unix,Windows。
os.path.
samefile
(path1, path2)¶如果两个路径名参数都指向相同的文件或目录,则返回
True
。这由设备号和i节点号决定,如果对任一路径名的os.stat()
调用失败,则引发异常。可用性:Unix,Windows。
在版本3.2中更改:添加了Windows支持。
在版本3.4中更改: Windows现在使用与所有其他平台相同的实现。
os.path.
sameopenfile
(fp1, fp2)¶如果文件描述器fp1和fp2指向同一文件,则返回
True
。可用性:Unix,Windows。
在版本3.2中更改:添加了Windows支持。
os.path.
samestat
(stat1, stat2)¶如果统计数据元组stat1和stat2指向同一文件,则返回
True
。这些结构可能已由os.fstat()
,os.lstat()
或os.stat()
返回。此函数实现samefile()
和sameopenfile()
使用的基础比较。可用性:Unix,Windows。
在版本3.4中更改:添加了Windows支持。
-
os.path.
split
(path)¶ Split the pathname path into a pair,
(head, tail)
where tail is the last pathname component and head is everything leading up to that. 尾部分不会包含斜杠;如果路径以斜线结尾,则尾将为空。如果path中没有斜线,head将为空。如果path为空,head 和 tail两个都将为空。尾部的斜线会从head中去除掉,除非它是根目录(只包含一个或多个斜线的目录)。在所有情况下,join(head, tail)
返回与path相同位置的路径字符串可能不同)。另请参阅函数dirname()
和basename()
。
os.path.
splitdrive
(path)¶Split the pathname path into a pair
(drive, tail)
where drive is either a mount point or the empty string. 在没有使用驱动器描述符的系统上,drive 将永远是空字符串。在所有情况下,驱动 + 尾
将与路径相同。在Windows上,将路径名分割到驱动器/ UNC共享点和相对路径。
如果路径包含驱动器号,驱动器将包含直到并包括冒号的所有内容。例如
splitdrive("c:/dir")
返回(“c:”, “/ dir”)
如果路径包含UNC路径,则驱动器将包含主机名和共享(最多但不包括第四个分隔符)。例如
splitdrive("//host/computer/dir")
返回(“// host / computer”, “/ dir”) t4 >
os.path.
splitext
(path)¶Split the pathname path into a pair
(root, ext)
such thatroot + ext == path
, and ext is empty or begins with a period and contains at most one period. 忽略basename前面的点号;splitext('.cshrc')
返回('.cshrc', '')
。
os.path.
splitunc
(path)¶自3.1版起已弃用:改用splitdrive。
Split the pathname path into a pair
(unc, rest)
so that unc is the UNC mount point (such asr'\\host\mount'
), if present, and rest the rest of the path (such asr'\path\file.ext'
). 对于包含驱动器字母的路径,unc将永远是空字符串。可用性:Windows。
os.path.
supports_unicode_filenames
¶True
如果任意Unicode字符串可以用作文件名(在文件系统限制的限制之内)。