os.path ---常用路径名操作

源代码: Lib/posixpath.py (对于POSIX)和 Lib/ntpath.py (对于Windows NT)。


这个模块在路径名上实现一些有用的函数。要读取或写入文件,请参见 open() ,有关访问文件系统的信息,请参见 os 模块。路径参数可以作为字符串或字节传递。鼓励应用程序将文件名表示为(Unicode)字符串。不幸的是,某些文件名在UNIX上可能无法表示为字符串,因此需要在UNIX上支持任意文件名的应用程序应该使用字节对象来表示路径名。反之亦然,使用bytes对象不能表示Windows上的所有文件名(在标准中 mbcs 因此,Windows应用程序应该使用字符串对象来访问所有文件。

与unix shell不同,python不执行任何操作 自动的 路径扩展。功能,例如 expanduser()expandvars() 当应用程序需要类似外壳的路径扩展时,可以显式调用。(也见 glob 模块。

参见

这个 pathlib 模块提供高级路径对象。

注解

所有这些函数要么只接受字节,要么只接受字符串对象作为它们的参数。如果返回路径或文件名,则结果是相同类型的对象。

注解

由于不同的操作系统具有不同的路径名约定,因此标准库中存在此模块的多个版本。这个 os.path 模块始终是适合运行python操作系统的路径模块,因此可用于本地路径。但是,如果您想操作一个路径 总是 以不同的格式之一。它们都有相同的接口:

  • posixpath 对于Unix样式的路径

  • ntpath 对于Windows路径

在 3.8 版更改: exists()lexists()isdir()isfile()islink()ismount() 现在回来 False 而不是对包含在操作系统级别不可显示的字符或字节的路径引发异常。

os.path.abspath(path)

返回路径名的规范化绝对版本 path . 在大多数平台上,这相当于调用函数 normpath() 如下: normpath(join(os.getcwd(), path)) .

在 3.6 版更改: 接受一 path-like object .

os.path.basename(path)

返回路径名的基名称 path . 这是通过传递返回的对的第二个元素 path 对函数 split() . 请注意,此函数的结果与UNIX不同 basename 程序;在哪里 basename 对于 '/foo/bar/' 返回 'bar' , the basename() 函数返回空字符串 (''

在 3.6 版更改: 接受一 path-like object .

os.path.commonpath(paths)

返回序列中每个路径名的最长公共子路径 路径 . 提高 ValueError 如果 路径 包含绝对路径名和相对路径名, 路径 在不同的驱动器上,或者如果 路径 是空的。不像 commonprefix() ,这将返回有效路径。

Availability :Unix、Windows。

3.5 新版功能.

在 3.6 版更改: 接受一个序列 path-like objects .

os.path.commonprefix(list)

返回最长路径前缀(以字符为单位),它是中所有路径的前缀。 list . 如果 list 为空,返回空字符串 (''

注解

此函数可能返回无效路径,因为它一次只能处理一个字符。要获取有效路径,请参见 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)

返回路径名的目录名 path . 这是通过传递返回的对的第一个元素 path 对函数 split() .

在 3.6 版更改: 接受一 path-like object .

os.path.exists(path)

返回 True 如果 path 引用现有路径或打开的文件描述符。返回 False 用于断开的符号链接。在某些平台上,此函数可能返回 False 如果未授予执行权限 os.stat() 在请求的文件上,即使 path 物理存在。

在 3.3 版更改: path 现在可以是整数: True 如果是打开的文件描述符,则返回, False 否则。

在 3.6 版更改: 接受一 path-like object .

os.path.lexists(path)

返回 True 如果 path 引用现有路径。返回 True 用于断开的符号链接。相当于 exists() 在缺乏的平台上 os.lstat() .

在 3.6 版更改: 接受一 path-like object .

os.path.expanduser(path)

在UNIX和Windows上,返回参数的初始组件为 ~~user 换成那个 user 的主目录。

在Unix上,初始 ~ 被环境变量替换 HOME 如果已设置,则通过内置模块在密码目录中查找当前用户的主目录。 pwd . 最初的 ~user 直接在密码目录中查找。

在Windows上, USERPROFILE 将在设置时使用,否则为 HOMEPATHHOMEDRIVE 将被使用。最初的 ~user 通过从上面派生的已创建用户路径中剥离最后一个目录组件来处理。

如果扩展失败或路径不是以颚化符开头,则返回的路径不变。

在 3.6 版更改: 接受一 path-like object .

在 3.8 版更改: 不再使用 HOME 在Windows上。

os.path.expandvars(path)

返回扩展了环境变量的参数。窗体的子字符串 $name${{name}} 替换为环境变量的值 name . 格式错误的变量名和对不存在的变量的引用保持不变。

在Windows上, %name% 除了支持扩展 $name${{name}} .

在 3.6 版更改: 接受一 path-like object .

os.path.getatime(path)

返回上次访问的时间 path . 返回值是一个浮点数,给出了自该epoch以来的秒数(请参见 time 模块)。提高 OSError 如果文件不存在或不可访问。

os.path.getmtime(path)

返回上次修改的时间 path . 返回值是一个浮点数,给出了自该epoch以来的秒数(请参见 time 模块)。提高 OSError 如果文件不存在或不可访问。

在 3.6 版更改: 接受一 path-like object .

os.path.getctime(path)

返回系统的ctime,在某些系统(如unix)上,它是最后一次元数据更改的时间,而在其他系统(如windows)上,它是 path . 返回值是一个数字,给出了自该时代以来的秒数(请参见 time 模块)。提高 OSError 如果文件不存在或不可访问。

在 3.6 版更改: 接受一 path-like object .

os.path.getsize(path)

返回的大小(字节) path . 提高 OSError 如果文件不存在或不可访问。

在 3.6 版更改: 接受一 path-like object .

os.path.isabs(path)

返回 True 如果 path 是绝对路径名。在UNIX上,这意味着它以斜线开头,在Windows上,它在切掉一个可能的驱动器号后以(反)斜线开头。

在 3.6 版更改: 接受一 path-like object .

os.path.isfile(path)

返回 True 如果 path 是一个 existing 常规文件。这遵循符号链接,因此 islink()isfile() 对于同一路径可以为真。

在 3.6 版更改: 接受一 path-like object .

os.path.isdir(path)

返回 True 如果 path 是一个 existing 目录。这遵循符号链接,因此 islink()isdir() 对于同一路径可以为真。

在 3.6 版更改: 接受一 path-like object .

返回 True 如果 path 指的是 existing 作为符号链接的目录项。总是 False 如果python运行时不支持符号链接。

在 3.6 版更改: 接受一 path-like object .

os.path.ismount(path)

返回 True 如果路径名 path 是一个 mount point :文件系统中安装了不同文件系统的点。在posix上,函数检查 path 的父母, {path}/.. ,位于不同的设备上 path ,还是 {path}/..path 指向同一设备上的同一个i节点——这应该检测所有UNIX和POSIX变体的装入点。它不能可靠地检测同一文件系统上的绑定装载。在Windows上,驱动器号根目录和共享UNC始终是装入点,并且对于任何其他路径都是装入点。 GetVolumePathName 调用以查看它是否与输入路径不同。

3.4 新版功能: 支持在Windows上检测非根安装点。

在 3.6 版更改: 接受一 path-like object .

os.path.join(path, *paths)

智能地连接一个或多个路径组件。返回值是 path 以及 *paths 只有一个目录分隔符 (os.sep )在每个非空部分之后,除了最后一个部分,这意味着只有最后一个部分为空时,结果才会以分隔符结尾。如果某个组件是绝对路径,则会丢弃所有以前的组件,并从绝对路径组件继续联接。

在Windows上,绝对路径组件(例如, r'\foo' )遇到。如果某个组件包含驱动器号,则会丢弃所有以前的组件并重置驱动器号。注意,由于每个驱动器都有一个当前目录, os.path.join("c:", "foo") 表示相对于驱动器上当前目录的路径 C: (c:foo ),而不是 c:\foo .

在 3.6 版更改: 接受一 path-like object 对于 path路径 .

os.path.normcase(path)

规范化路径名的大小写。在Windows上,将路径名中的所有字符转换为小写,并将正斜杠转换为反斜杠。在其他操作系统上,返回路径不变。

在 3.6 版更改: 接受一 path-like object .

os.path.normpath(path)

通过折叠冗余分隔符和上一级引用来规范化路径名,以便 A//BA/B/A/./BA/foo/../B 都变成 A/B . 此字符串操作可能会更改包含符号链接的路径的含义。在Windows上,它将前斜杠转换为后斜杠。要规范化案例,请使用 normcase() .

在 3.6 版更改: 接受一 path-like object .

os.path.realpath(path)

返回指定文件名的规范路径,消除路径中遇到的任何符号链接(如果操作系统支持)。

注解

当符号链接循环发生时,返回的路径将是循环的一个成员,但不保证将是哪个成员。

在 3.6 版更改: 接受一 path-like object .

在 3.8 版更改: 符号链接和连接现在在Windows上解析。

os.path.relpath(path, start=os.curdir)

将相对文件路径返回到 path 从当前目录或从可选目录 开始 目录。这是一个路径计算:不能访问文件系统来确认 path开始 .

开始 默认为 os.curdir .

Availability :Unix、Windows。

在 3.6 版更改: 接受一 path-like object .

os.path.samefile(path1, path2)

返回 True 如果两个路径名参数都引用同一个文件或目录。这由设备号和i节点号决定,如果 os.stat() 调用任一路径名都失败。

Availability :Unix、Windows。

在 3.2 版更改: 添加了Windows支持。

在 3.4 版更改: Windows现在使用与所有其他平台相同的实现。

在 3.6 版更改: 接受一 path-like object .

os.path.sameopenfile(fp1, fp2)

返回 True 如果文件描述符 fp1fp2 请参阅同一文件。

Availability :Unix、Windows。

在 3.2 版更改: 添加了Windows支持。

在 3.6 版更改: 接受一 path-like object .

os.path.samestat(stat1, stat2)

返回 True 如果stat元组 信号传导子和转录活化子1STAT2 请参阅同一文件。这些结构可能是 os.fstat()os.lstat()os.stat() . 此函数实现 samefile()sameopenfile() .

Availability :Unix、Windows。

在 3.4 版更改: 添加了Windows支持。

在 3.6 版更改: 接受一 path-like object .

os.path.split(path)

拆分路径名 path 成双, (head, tail) 在哪里? tail 是最后一个路径名组件,并且 head 一切都是为了这个。这个 tail 部分不包含斜线;如果 path 以斜线结尾, tail 将为空。如果没有斜线 pathhead 将为空。如果 path 是空的,两者都是空的 headtail 是空的。删除尾随斜线 head 除非它是根(只有一个或多个斜杠)。在所有情况下, join(head, tail) 返回与相同位置的路径 path (但字符串可能不同)。另请参见功能 dirname()basename() .

在 3.6 版更改: 接受一 path-like object .

os.path.splitdrive(path)

拆分路径名 path 成双 (drive, tail) 在哪里? 开车 是装入点或空字符串。在不使用驱动规格的系统上, 开车 将始终为空字符串。在所有情况下, drive + tail 将与 path .

在Windows上,将路径名拆分为驱动器/UNC SharePoint和相对路径。

如果路径包含驱动器号,则驱动器将包含冒号之前(包括冒号)的所有内容。例如 splitdrive("c:/dir") 返回 ("c:", "/dir")

如果路径包含UNC路径,驱动器将包含主机名和共享,最多不包括第四个分隔符。例如 splitdrive("//host/computer/dir") 返回 ("//host/computer", "/dir")

在 3.6 版更改: 接受一 path-like object .

os.path.splitext(path)

拆分路径名 path 成双 (root, ext) 这样的话 root + ext == pathext 为空或以句点开头,最多包含一个句点。忽略basename上的前导句点; splitext('.cshrc') 返回 ('.cshrc', '') .

在 3.6 版更改: 接受一 path-like object .

os.path.supports_unicode_filenames

True 如果任意Unicode字符串可以用作文件名(在文件系统所施加的限制范围内)。