10.1. os.path — 常见的路径名操作 — Python 文档
10.1. 操作系统路径 — 常见的路径名操作
该模块在路径名上实现了一些有用的功能。 要读取或写入文件,请参阅 open(),而要访问文件系统,请参阅 os 模块。
与 unix shell 不同,Python 不进行任何 自动 路径扩展。 当应用程序需要类似 shell 的路径扩展时,可以显式调用诸如 expanduser() 和 expandvars() 之类的函数。 (另请参阅 glob 模块。)
笔记
由于不同的操作系统有不同的路径名约定,因此标准库中有该模块的多个版本。 os.path 模块始终是适用于运行 Python 的操作系统的路径模块,因此可用于本地路径。 但是,如果您想以不同格式之一操作 始终 的路径,您也可以导入和使用各个模块。 它们都有相同的界面:
posixpath
用于 UNIX 样式的路径ntpath
用于 Windows 路径- macpath 用于旧式 MacOS 路径
os2emxpath
用于 OS/2 EMX 路径
- os.path.abspath(path)
返回路径名 path 的规范化绝对化版本。 在大多数平台上,这相当于调用函数 normpath() 如下:
normpath(join(os.getcwd(), path))
。1.5.2 版中的新功能。
- os.path.basename(path)
- 返回路径名 路径 的基本名称。 这是通过将 path 传递给函数 split() 返回的对的第二个元素。 注意这个函数的结果和Unix的basename程序不同; 其中,
'/foo/bar/'
的 basename 返回'bar'
,basename() 函数返回一个空字符串 ()。
- os.path.commonprefix(list)
- 返回最长路径前缀(逐字符取),它是 列表 中所有路径的前缀。 如果 list 为空,则返回空字符串 (
)。 请注意,这可能会返回无效路径,因为它一次只处理一个字符。
- os.path.dirname(path)
- 返回路径名路径的目录名。 这是通过将 path 传递给函数 split() 返回的对的第一个元素。
- os.path.exists(path)
- 如果 path 引用现有路径,则返回
True
。 对于损坏的符号链接,返回False
。 在某些平台上,如果未授予对请求的文件执行 os.stat() 的权限,即使 路径 物理存在,此函数也可能返回False
。
- os.path.lexists(path)
如果 path 引用现有路径,则返回
True
。 对于损坏的符号链接,返回True
。 在缺少 os.lstat() 的平台上相当于 exists()。2.4 版中的新功能。
- os.path.expanduser(path)
在 Unix 和 Windows 上,返回带有
~
或~user
的初始组件替换为 用户 的主目录的参数。在 Unix 上,初始的
~
被设置为环境变量HOME
替换; 否则通过内置模块pwd在password目录中查找当前用户的家目录。 直接在密码目录中查找初始的~user
。在 Windows 上,如果设置了
HOME
和USERPROFILE
,否则将使用HOMEPATH
的组合和HOMEDRIVE
将被使用。 初始的~user
是通过从上面派生的创建的用户路径中剥离最后一个目录组件来处理的。如果扩展失败或路径不以波浪号开头,则返回路径不变。
- os.path.expandvars(path)
返回扩展了环境变量的参数。
$name
或${name}
形式的子串被环境变量 name 的值替换。 格式错误的变量名和对不存在变量的引用保持不变。在 Windows 上,除了
$name
和${name}
之外,还支持%name%
扩展。
- os.path.getatime(path)
返回上次访问 path 的时间。 返回值是一个数字,给出自纪元以来的秒数(参见 time 模块)。 如果文件不存在或无法访问,则引发 os.error。
1.5.2 版中的新功能。
2.3 版本变化: 如果os.stat_float_times()返回
True
,结果为浮点数。
- os.path.getmtime(path)
返回最后修改path的时间。 返回值是一个数字,给出自纪元以来的秒数(参见 time 模块)。 如果文件不存在或无法访问,则引发 os.error。
1.5.2 版中的新功能。
2.3 版本变化: 如果os.stat_float_times()返回
True
,结果为浮点数。
- os.path.getctime(path)
返回系统的 ctime,在某些系统(如 Unix)上是最后一次元数据更改的时间,而在其他系统(如 Windows)上是 path 的创建时间。 返回值是一个数字,给出自纪元以来的秒数(参见 time 模块)。 如果文件不存在或无法访问,则引发 os.error。
2.3 版中的新功能。
- os.path.getsize(path)
返回 path 的大小(以字节为单位)。 如果文件不存在或无法访问,则引发 os.error。
1.5.2 版中的新功能。
- os.path.isabs(path)
- 如果 path 是绝对路径名,则返回
True
。 在 Unix 上,这意味着它以斜杠开头,在 Windows 上,它在切掉一个潜在的驱动器号后以(反)斜杠开头。
- os.path.islink(path)
- 如果 path 指的是作为符号链接的目录条目,则返回
True
。 如果 Python 运行时不支持符号链接,则始终为False
。
- os.path.ismount(path)
- 如果路径名 path 是 挂载点 :文件系统中已挂载不同文件系统的点,则返回
True
。 该函数检查 path 的父节点path/..
是否与 path 位于不同的设备上,或者path/..
和 path[ X141X] 指向同一设备上的同一个 i-node——这应该检测所有 Unix 和 POSIX 变体的挂载点。
- os.path.join(path, *paths)
智能地连接一个或多个路径组件。 返回值是 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 上,它还会将正斜杠转换为反斜杠。
- os.path.normpath(path)
- 通过折叠冗余分隔符和上级引用来规范路径名,以便
A//B
、A/B/
、A/./B
和A/foo/../B
都变成A/B
。 此字符串操作可能会更改包含符号链接的路径的含义。 在 Windows 上,它将正斜杠转换为反斜杠。 要规范化大小写,请使用 normcase()。
- os.path.realpath(path)
返回指定文件名的规范路径,消除路径中遇到的任何符号链接(如果操作系统支持它们)。
2.2 版中的新功能。
- os.path.relpath(path[, start])
从当前目录或可选的 start 目录返回到 path 的相对文件路径。 这是一个路径计算:不访问文件系统来确认 path 或 start 的存在或性质。
start 默认为 os.curdir。
可用性:Windows、Unix。
2.6 版中的新功能。
- os.path.samefile(path1, path2)
如果两个路径名参数都指向同一个文件或目录(如设备编号和索引节点编号所示),则返回
True
。 如果对任一路径名的 os.stat() 调用失败,则引发异常。可用性:Unix。
- os.path.sameopenfile(fp1, fp2)
如果文件描述符 fp1 和 fp2 指向同一个文件,则返回
True
。可用性:Unix。
- os.path.samestat(stat1, stat2)
如果统计元组 stat1 和 stat2 引用同一个文件,则返回
True
。 这些结构可能已由 os.fstat()、os.lstat() 或 os.stat() 返回。 该函数实现了 samefile() 和 sameopenfile() 使用的底层比较。可用性:Unix。
- os.path.split(path)
- 将路径名 path 拆分为一对,
(head, tail)
,其中 tail 是最后一个路径名组件,而 head 是导致它的一切。 tail 部分永远不会包含斜线; 如果 path 以斜杠结尾,则 tail 将为空。 如果 path 中没有斜线,则 head 将为空。 如果 path 为空,则 head 和 tail 都为空。 尾部斜杠从 head 中剥离,除非它是根(只有一个或多个斜杠)。 在所有情况下,join(head, tail)
返回与 path 相同位置的路径(但字符串可能不同)。 另请参阅函数 dirname() 和 basename()。
- os.path.splitdrive(path)
将路径名 path 拆分为一对
(drive, tail)
,其中 drive 是驱动器规范或空字符串。 在不使用驱动器规范的系统上,drive 将始终为空字符串。 在所有情况下,drive + tail
将与 path 相同。1.3 版中的新功能。
- os.path.splitext(path)
将路径名 path 拆分为一对
(root, ext)
,使得root + ext == path
和 ext 为空或以句点开头且最多包含一个句点。 基本名称上的前导句点将被忽略;splitext('.cshrc')
返回('.cshrc', )
。在 2.6 版更改: 当唯一的句点是第一个字符时,早期版本可能会产生空根。
- os.path.splitunc(path)
将路径名 path 拆分为一对
(unc, rest)
,以便 unc 是 UNC 挂载点(例如r'\\host\mount'
)(如果存在)和 ]rest 路径的其余部分(例如r'\path\file.ext'
)。 对于包含驱动器号的路径,unc 将始终为空字符串。可用性:Windows。
- os.path.walk(path, visit, arg)
为以 path 为根的目录树中的每个目录(包括 path 本身,如果它是一个目录)调用函数 visit 和参数
(arg, dirname, names)
)。 参数 dirname 指定访问的目录,参数 names 列出目录中的文件(来自os.listdir(dirname)
)。 visit函数可以修改names来影响dirname下面访问的目录集,例如 以避免访问树的某些部分。 (由 names 引用的对象必须就地修改,使用 del 或切片赋值。)笔记
目录的符号链接不被视为子目录,因此 walk() 不会访问它们。 要访问链接目录,您必须使用
os.path.islink(file)
和os.path.isdir(file)
来标识它们,并根据需要调用 walk()。笔记
此函数已弃用,并已在 Python 3 中删除,取而代之的是 os.walk()。
- os.path.supports_unicode_filenames
True
如果任意 Unicode 字符串可以用作文件名(在文件系统施加的限制内)。2.3 版中的新功能。