On this page
os.path —通用路径名操作
源代码: Lib/posixpath.py(对于 POSIX)和Lib/ntpath.py(对于 Windows NT)。
该模块在路径名上实现了一些有用的Function。要读取或写入文件,请参见open(),要访问文件系统,请参见os模块。路径参数可以字符串或字节形式传递。鼓励应用程序将文件名表示为(Unicode)字符串。不幸的是,某些文件名在 Unix 上可能无法用字符串表示,因此需要在 Unix 上支持任意文件名的应用程序应使用字节对象表示路径名。反之亦然,使用字节对象不能代表 Windows 上的所有文件名(以标准mbcs
编码),因此 Windows 应用程序应使用字符串对象来访问所有文件。
与 unix shell 不同,Python 不执行任何“自动”路径扩展。当应用程序需要类 Shell 路径扩展时,可以显式调用诸如expanduser()和expandvars()之类的Function。 (另请参见glob模块。)
See also
pathlib模块提供高级路径对象。
Note
所有这些函数都仅接受字节或字符串对象作为其参数。如果返回路径或文件名,则结果是相同类型的对象。
Note
由于不同的 os 具有不同的路径名约定,因此标准库中有该模块的多个版本。 os.path模块始终是适用于运行 Python 的 os 的路径模块,因此可用于本地路径。但是,如果您要操纵的路径始终(以不同格式之一),也可以导入和使用各个模块。它们都有相同的接口:
posixpath
用于 UNIX 样式的路径ntpath
用于 Windows 路径
在 3.8 版中进行了更改:exists(),lexists(),isdir(),isfile(),islink()和ismount()现在返回False
,而不是为包含在 os 级别无法表示的字符或字节的路径引发异常。
os.path.
abspath
(* path *)- 返回路径名* path *的归一化绝对化版本。在大多数平台上,这等效于如下调用函数normpath():
normpath(join(os.getcwd(), path))
。
- 返回路径名* path *的归一化绝对化版本。在大多数平台上,这等效于如下调用函数normpath():
在版本 3.6 中更改:接受path-like object。
os.path.
basename
(* path *)- 返回 pathname * path 的基本名称。这是pass将 path *传递给函数split()返回的对中的第二个元素。请注意,此函数的结果与 Unix basename 程序不同;
'/foo/bar/'
的 basename 返回'bar'
,basename()函数返回一个空字符串(''
)。
- 返回 pathname * path 的基本名称。这是pass将 path *传递给函数split()返回的对中的第二个元素。请注意,此函数的结果与 Unix basename 程序不同;
在版本 3.6 中更改:接受path-like object。
os.path.
commonpath
(* paths *)- 返回序列* paths 中每个路径名的最长公共子路径。如果_paths 既包含绝对路径名又包含相对路径名,则提高ValueError,如果 paths 在不同的驱动器上,或者如果 paths *为空。与commonprefix()不同,这将返回有效路径。
Availability:Unix,Windows。
3.5 版中的新Function。
在版本 3.6 中更改:接受path-like objects的序列。
os.path.
commonprefix
(* list *)- 返回最长的路径前缀(一个字符一个字符),它是* list 中所有路径的前缀。如果 list *为空,则返回空字符串(
''
)。
- 返回最长的路径前缀(一个字符一个字符),它是* list 中所有路径的前缀。如果 list *为空,则返回空字符串(
Note
此函数可能一次返回一个字符,因此可能返回无效路径。要获取有效路径,请参见commonpath()。
>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'
>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'
在版本 3.6 中更改:接受path-like object。
os.path.
dirname
(* path *)- 返回 pathname * path 的目录名称。这是pass将 path *传递给函数split()返回的对中的第一个元素。
在版本 3.6 中更改:接受path-like object。
os.path.
exists
(* path *)- 如果* path 引用现有路径或打开的文件 Descriptors,则返回
True
。对于断开的符号链接,返回False
。在某些平台上,即使未实际执行 path *,也未授予对所请求文件执行os.stat()的权限,此函数可能返回False
。
- 如果* path 引用现有路径或打开的文件 Descriptors,则返回
在版本 3.3 中更改:* path *现在可以是整数:如果它是打开的文件 Descriptors,则返回True
,否则返回False
。
在版本 3.6 中更改:接受path-like object。
os.path.
lexists
(* path *)- 如果* path *指向现有路径,则返回
True
。对于断开的符号链接,返回True
。在缺少os.lstat()的平台上等效于exists()。
- 如果* path *指向现有路径,则返回
在版本 3.6 中更改:接受path-like object。
os.path.
expanduser
(* path *)- 在 Unix 和 Windows 上,返回参数,该参数的初始成分为
~
或~user
,并由该* user *的主目录替换。
- 在 Unix 和 Windows 上,返回参数,该参数的初始成分为
在 Unix 上,如果设置了初始变量~
,则将其设置为环境变量 HOME
;否则,pass内置模块pwd在密码目录中查找当前用户的主目录。直接在密码目录中查找首字母~user
。
在 Windows 上,如果已设置,则将使用 USERPROFILE
,否则将使用 HOMEPATH
和 HOMEDRIVE
的组合。初始~user
是pass从上面派生的创建的用户路径中删除最后一个目录组件来处理的。
如果扩展失败,或者路径不是以波浪号开头,则路径将保持不变。
在版本 3.6 中更改:接受path-like object。
在 3.8 版中进行了更改:在 Windows 上不再使用 HOME
。
os.path.
expandvars
(* path *)- 返回带有扩展的环境变量的参数。形式为
$name
或${name}
的子字符串被环境变量* name *的值替换。格式错误的变量名称和对不存在变量的引用保持不变。
- 返回带有扩展的环境变量的参数。形式为
在 Windows 上,除了$name
和${name}
之外,还支持%name%
扩展。
在版本 3.6 中更改:接受path-like object。
os.path.
getatime
(* path *)os.path.
getmtime
(* path *)
在版本 3.6 中更改:接受path-like object。
os.path.
getctime
(* path *)
在版本 3.6 中更改:接受path-like object。
os.path.
getsize
(* path *)- 返回* path *的大小(以字节为单位)。如果文件不存在或无法访问,请提高OSError。
在版本 3.6 中更改:接受path-like object。
os.path.
isabs
(* path *)- 如果* path *是绝对路径名,则返回
True
。在 Unix 上,这意味着它以斜杠开头,而在 Windows 上,它是在切断潜在的驱动器号后以(反)斜杠开头。
- 如果* path *是绝对路径名,则返回
在版本 3.6 中更改:接受path-like object。
os.path.
isfile
(* path *)
在版本 3.6 中更改:接受path-like object。
在版本 3.6 中更改:接受path-like object。
os.path.
islink
(* path *)- 如果* path *引用的是作为符号链接的existing目录条目,则返回
True
。如果 Python 运行时不支持符号链接,则始终为False
。
- 如果* path *引用的是作为符号链接的existing目录条目,则返回
在版本 3.6 中更改:接受path-like object。
os.path.
ismount
(* path *)- 如果路径名* path 是 mount point ,则返回
True
:文件系统中已安装其他文件系统的点。在 POSIX 上,该函数检查 path 的父path/..
是否与 path 在不同的设备上,或者path/..
和 path *指向同一设备上的同一 i 节点-这应该检测安装点适用于所有 Unix 和 POSIX 变体。它不能可靠地检测同一文件系统上的绑定安装。在 Windows 上,驱动器号根目录和共享 UNC 始终是装入点,对于其他任何路径GetVolumePathName
都将被调用以查看其是否与 Importing 路径不同。
- 如果路径名* path 是 mount point ,则返回
3.4 版中的新Function:支持在 Windows 上检测非根安装点。
在版本 3.6 中更改:接受path-like object。
os.path.
join
(* path ,* paths *)- 智能地连接一个或多个路径组件。返回值是* path 和* paths *的任何成员的串接,每个非空部分后面都紧跟一个目录分隔符(
os.sep
),最后一个除外,这意味着如果最后一部分,结果将仅以分隔符结尾是空的。如果组件是绝对路径,则所有先前的组件都将被丢弃,并且连接将从绝对路径组件 continue。
- 智能地连接一个或多个路径组件。返回值是* path 和* paths *的任何成员的串接,每个非空部分后面都紧跟一个目录分隔符(
在 Windows 上,当遇到绝对路径成分(例如r'\foo'
)时,不会重置驱动器号。如果某个组件包含驱动器号,则会丢弃所有先前的组件,并重置驱动器号。请注意,由于每个驱动器都有一个当前目录,因此os.path.join("c:", "foo")
表示相对于驱动器C:
(c:foo
)而不是c:\foo
上的当前目录的路径。
在版本 3.6 中更改:接受path-like object表示* path 和 paths *。
os.path.
normcase
(* path *)- 标准化路径名的大小写。在 Windows 上,将路径名中的所有字符都转换为小写,并将正斜杠转换为反斜杠。在其他 os 上,返回路径不变。
在版本 3.6 中更改:接受path-like object。
os.path.
normpath
(* path *)- pass折叠冗余分隔符和上级引用来标准化路径名,以使
A//B
,A/B/
,A/./B
和A/foo/../B
都变为A/B
。此字符串操作可能会更改包含符号链接的路径的含义。在 Windows 上,它将正斜杠转换为反斜杠。要规范大小写,请使用normcase()。
- pass折叠冗余分隔符和上级引用来标准化路径名,以使
在版本 3.6 中更改:接受path-like object。
os.path.
realpath
(* path *)- 返回指定文件名的规范路径,消除路径中遇到的任何符号链接(如果 os 支持)。
Note
当发生符号链接周期时,返回的路径将是该周期的一个成员,但不能保证将成为哪个成员。
在版本 3.6 中更改:接受path-like object。
在 3.8 版中进行了更改:现在可以在 Windows 上解决符号链接和结。
os.path.
relpath
(* path , start = os.curdir *)- 从当前目录或可选的* start 目录将相对文件路径返回到 path 。这是路径计算:不访问文件系统以确认 path 或 start *的存在或性质。
开始默认为os.curdir。
Availability:Unix,Windows。
在版本 3.6 中更改:接受path-like object。
os.path.
samefile
(* path1 , path2 *)- 如果两个路径名参数都引用相同的文件或目录,则返回
True
。这由设备号和智能节点号确定,如果在任一路径名上的os.stat()调用失败,都会引发异常。
- 如果两个路径名参数都引用相同的文件或目录,则返回
Availability:Unix,Windows。
在版本 3.2 中更改:添加了 Windows 支持。
在版本 3.4 中进行了更改:Windows 现在使用与所有其他平台相同的实现。
在版本 3.6 中更改:接受path-like object。
os.path.
sameopenfile
(* fp1 , fp2 *)- 如果文件 Descriptors* fp1 和 fp2 *指向同一个文件,则返回
True
。
- 如果文件 Descriptors* fp1 和 fp2 *指向同一个文件,则返回
Availability:Unix,Windows。
在版本 3.2 中更改:添加了 Windows 支持。
在版本 3.6 中更改:接受path-like object。
os.path.
samestat
(* stat1 , stat2 *)- 如果 statTuples* stat1 和 stat2 *引用同一个文件,则返回
True
。这些结构可能是os.fstat(),os.lstat()或os.stat()返回的。此函数实现samefile()和sameopenfile()使用的基础比较。
- 如果 statTuples* stat1 和 stat2 *引用同一个文件,则返回
Availability:Unix,Windows。
在版本 3.4 中更改:添加了 Windows 支持。
在版本 3.6 中更改:接受path-like object。
os.path.
split
(* path *)- 将路径名* path 分成Pair,
(head, tail)
,其中 tail 是最后一个路径名组成部分,而 head *是导致该状态的所有内容。 * tail 部分永远不会包含斜杠;如果 path 以斜杠结尾,则 tail 将为空。如果 path 中没有斜杠,则 head 将为空。如果 path 为空,则 head 和 tail 均为空。除非末尾是根,否则将从 head 除去尾部的斜杠(仅一个或多个斜杠)。在所有情况下,join(head, tail)
返回的路径与 path *相同的位置(但字符串可能不同)。另请参见Functiondirname()和basename()。
- 将路径名* path 分成Pair,
在版本 3.6 中更改:接受path-like object。
os.path.
splitdrive
(* path *)- 将路径名* path 分成Pair
(drive, tail)
,其中 drive 是安装点或空字符串。在不使用驱动器规格的系统上, drive 将始终为空字符串。在所有情况下,drive + tail
将与 path *相同。
- 将路径名* path 分成Pair
在 Windows 上,将路径名分为驱动器/ UNC 共享点和相对路径。
如果路径包含驱动器号,则驱动器将包含直到冒号(包括冒号)的所有内容。例如splitdrive("c:/dir")
返回("c:", "/dir")
如果路径包含 UNC 路径,则驱动器将包含主机名和共享,最多但不包括第四个分隔符。例如splitdrive("//host/computer/dir")
返回("//host/computer", "/dir")
在版本 3.6 中更改:接受path-like object。
os.path.
splitext
(* path *)- 将路径名* path 分成Pair
(root, ext)
,使得root + ext == path
,而 ext *为空或以一个句点开头,并且最多包含一个句点。基本名称的前导句号将被忽略;splitext('.cshrc')
返回('.cshrc', '')
。
- 将路径名* path 分成Pair
在版本 3.6 中更改:接受path-like object。
os.path.
supports_unicode_filenames
True
是否可以将任意 Unicode 字符串用作文件名(在文件系统所施加的限制内)。