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

该模块在路径名上实现了一些有用的Function。要读取或写入文件,请参见open(),要访问文件系统,请参见os模块。

Note

在 Windows 上,其中许多Function均不能正确支持 UNC 路径名。 splitunc()ismount()处理正确。

与 unix shell 不同,Python 不执行任何“自动”路径扩展。当应用程序需要类 Shell 路径扩展时,可以显式调用诸如expanduser()expandvars()之类的Function。 (另请参见glob模块。)

Note

由于不同的 os 具有不同的路径名约定,因此标准库中有该模块的多个版本。 os.path模块始终是适用于运行 Python 的 os 的路径模块,因此可用于本地路径。但是,如果您要操纵的路径始终(以不同格式之一),也可以导入和使用各个模块。它们都有相同的接口:

  • posixpath用于 UNIX 样式的路径

  • ntpath用于 Windows 路径

  • macpath用于旧式 MacOS 路径

  • os2emxpath用于 OS/2 EMX 路径

  • os.path. abspath(* path *)
    • 返回路径名* path *的归一化绝对化版本。在大多数平台上,这等效于如下调用函数normpath()normpath(join(os.getcwd(), path))

版本 1.5.2 中的新Function。

  • os.path. basename(* path *)

    • 返回 pathname * path 的基本名称。这是pass将 path *传递给函数split()返回的对中的第二个元素。请注意,此函数的结果与 Unix basename 程序不同; '/foo/bar/'basename 返回'bar'basename()函数返回一个空字符串('')。
  • os.path. commonprefix(* list *)

    • 返回最长的路径前缀(一个字符一个字符),它是* list 中所有路径的前缀。如果 list *为空,则返回空字符串('')。请注意,这可能返回无效路径,因为它一次可以处理一个字符。
  • os.path. dirname(* path *)

    • 返回 pathname * path 的目录名称。这是pass将 path *传递给函数split()返回的对中的第一个元素。
  • os.path. exists(* path *)

    • 如果* path 指向现有路径,则返回True。对于断开的符号链接,返回False。在某些平台上,即使未实际执行 path *,也未授予对所请求文件执行os.stat()的权限,此函数可能返回False
  • os.path. lexists(* path *)

    • 如果* path *指向现有路径,则返回True。对于断开的符号链接,返回True。在缺少os.lstat()的平台上等效于exists()

2.4 版的新Function。

  • os.path. expanduser(* path *)
    • 在 Unix 和 Windows 上,返回参数,该参数的初始成分为~~user,并由该* user *的主目录替换。

在 Unix 上,如果设置了初始变量~,则将其设置为环境变量 HOME;否则,pass内置模块pwd在密码目录中查找当前用户的主目录。直接在密码目录中查找首字母~user

在 Windows 上,如果已设置,则将使用 HOME USERPROFILE,否则将使用 HOMEPATH HOMEDRIVE的组合。初始~user是pass从上面派生的创建的用户路径中删除最后一个目录组件来处理的。

如果扩展失败,或者路径不是以波浪号开头,则路径将保持不变。

  • os.path. expandvars(* path *)
    • 返回带有扩展的环境变量的参数。形式为$name${name}的子字符串被环境变量* name *的值替换。格式错误的变量名称和对不存在变量的引用保持不变。

在 Windows 上,除了$name${name}之外,还支持%name%扩展。

  • os.path. getatime(* path *)
    • 返回最后一次访问* path *的时间。返回值是一个数字,给出自纪元以来的秒数(请参见time模块)。如果文件不存在或无法访问,请提高os.error

版本 1.5.2 中的新Function。

在版本 2.3 中更改:如果os.stat_float_times()返回True,则结果为浮点数。

  • os.path. getmtime(* path *)
    • 返回* path *的最后修改时间。返回值是一个数字,给出自纪元以来的秒数(请参见time模块)。如果文件不存在或无法访问,请提高os.error

版本 1.5.2 中的新Function。

在版本 2.3 中更改:如果os.stat_float_times()返回True,则结果为浮点数。

  • os.path. getctime(* path *)
    • 返回系统的 ctime,在某些系统(例如 Unix)上,它是最后一次元数据更改的时间,而在其他系统(例如 Windows)上,则是* path *的创建时间。返回值是一个数字,给出自纪元以来的秒数(请参见time模块)。如果文件不存在或无法访问,请提高os.error

2.3 版的新Function。

  • os.path. getsize(* path *)
    • 返回* path *的大小(以字节为单位)。如果文件不存在或无法访问,请提高os.error

版本 1.5.2 中的新Function。

  • os.path. isabs(* path *)

    • 如果* path *是绝对路径名,则返回True。在 Unix 上,这意味着它以斜杠开头,而在 Windows 上,它是在切断潜在的驱动器号后以(反)斜杠开头。
  • os.path. isfile(* path *)

    • 如果* path *是现有的常规文件,则返回True。这遵循符号链接,因此对于同一路径,islink()isfile()都可以为 true。
  • os.path. isdir(* path *)

    • 如果* path *是现有目录,则返回True。这遵循符号链接,因此对于同一路径,islink()isdir()都可以为 true。
  • os.path. islink(* path *)

    • 如果* path *引用的目录条目是符号链接,则返回True。如果 Python 运行时不支持符号链接,则始终为False
  • os.path. ismount(* path *)

    • 如果路径名* path mount point ,则返回True:文件系统中已安装其他文件系统的点。该函数检查 path 的父path/..是否与 path 在不同的设备上,或者path/.. path *指向同一设备上的同一个 i 节点-这应该检测所有 Unix 的安装点和 POSIX 变体。
  • os.path. join(* path * paths *)

    • 智能地连接一个或多个路径组件。返回值是* path * paths *的任何成员的串接,每个非空部分后面都紧跟一个目录分隔符(os.sep),最后一个除外,这意味着如果最后一部分,结果将仅以分隔符结尾是空的。如果组件是绝对路径,则所有先前的组件都将被丢弃,并且连接将从绝对路径组件 continue。

在 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 *)

    • pass折叠冗余分隔符和上级引用来标准化路径名,以使A//BA/B/A/./BA/foo/../B都变为A/B。此字符串操作可能会更改包含符号链接的路径的含义。在 Windows 上,它将正斜杠转换为反斜杠。要规范大小写,请使用normcase()
  • os.path. realpath(* path *)

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

2.2 版中的新Function。

  • os.path. relpath(* path * [,* start *])
    • 从当前目录或可选的* start 目录将相对文件路径返回到 path 。这是路径计算:不访问文件系统以确认 path start *的存在或性质。

开始默认为os.curdir

可用性:Windows,Unix。

2.6 版的新Function。

  • os.path. samefile(* path1 path2 *)
    • 如果两个路径名参数都引用相同的文件或目录(由设备号和索引节点号指示),则返回True。如果对任一路径名的os.stat()调用失败,则引发异常。

Availability: Unix.

  • os.path. sameopenfile(* fp1 fp2 *)
    • 如果文件 Descriptors* fp1 fp2 *指向同一个文件,则返回True

Availability: Unix.

Availability: Unix.

  • 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()
  • os.path. splitdrive(* path *)

    • 将路径名* path 分成Pair(drive, tail),其中 drive 是驱动器规范或空字符串。在不使用驱动器规格的系统上, drive 将始终为空字符串。在所有情况下,drive + tail将与 path *相同。

1.3 版的新Function。

  • os.path. splitext(* path *)
    • 将路径名* path 分成Pair(root, ext),使得root + ext == path,而 ext *为空或以一个句点开头,并且最多包含一个句点。基本名称的前导句号将被忽略; splitext('.cshrc')返回('.cshrc', '')

在 2.6 版中进行了更改:当唯一的句点是第一个字符时,较早的版本可能会产生空的根。

  • os.path. splitunc(* path *)
    • 将路径名* path 分成Pair(unc, rest),以便 unc 是 UNC 挂载点(例如r'\\host\mount')(如果存在),并 rest 其余路径(例如r'\path\file.ext')。对于包含驱动器号的路径, unc *将始终为空字符串。

Availability: Windows.

  • os.path. walk(* path visit arg *)
    • 对于以* path 为根的目录树中的每个目录,调用带有参数(arg, dirname, names)的函数 visit (如果是目录,则包括 path 本身)。参数 dirname 指定访问的目录,参数 names *列出目录中的文件(从os.listdir(dirname)获取)。 * visit 函数可以修改 names 以影响 dirname 下面访问的目录集,例如避免访问树的某些部分。 ( names *所指的对象必须使用del或切片分配在适当的位置进行修改。)

Note

目录的符号链接不会被视为子目录,因此walk()不会访问它们。要访问链接的目录,必须用os.path.islink(file)os.path.isdir(file)标识它们,并根据需要调用walk()

Note

不推荐使用此函数,在 Python 3 中已删除该函数,而推荐使用os.walk()

  • os.path. supports_unicode_filenames
    • True是否可以将任意 Unicode 字符串用作文件名(在文件系统所施加的限制内)。

2.3 版的新Function。