pathlib ---面向对象的文件系统路径

3.4 新版功能.

源代码: Lib/pathlib.py


这个模块提供了一些类,用适合不同操作系统的语义来表示文件系统路径。路径类在 pure paths 提供纯计算操作而不需要I/O,以及 concrete paths ,它继承纯路径,但也提供I/O操作。

../_images/pathlib-inheritance.png

如果您以前从未使用过这个模块,或者只是不确定哪个类适合您的任务, Path 很可能是你需要的。它实例化了一个 concrete path 对于运行代码的平台。

纯路径在某些特殊情况下很有用;例如:

  1. 如果要在UNIX计算机上操作Windows路径(反之亦然)。不能实例化 WindowsPath 在Unix上运行时,但可以实例化 PureWindowsPath .

  2. 您希望确保您的代码只处理路径而不实际访问操作系统。在这种情况下,实例化一个纯类可能很有用,因为这些类没有任何操作系统访问操作。

参见

PEP 428 :pathlib模块——面向对象的文件系统路径。

参见

对于字符串的低级路径操作,还可以使用 os.path 模块。

基本用途

导入主类::

>>> from pathlib import Path

正在列出子目录::

>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
 PosixPath('__pycache__'), PosixPath('build')]

在此目录树中列出python源文件:

>>> list(p.glob('**/*.py'))
[PosixPath('test_pathlib.py'), PosixPath('setup.py'),
 PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
 PosixPath('build/lib/pathlib.py')]

在目录树中导航:

>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')

查询路径属性::

>>> q.exists()
True
>>> q.is_dir()
False

打开文件:

>>> with q.open() as f: f.readline()
...
'#!/bin/bash\n'

纯路径

纯路径对象提供了实际上不访问文件系统的路径处理操作。访问这些类有三种方法,我们也称之为 风味

class pathlib.PurePath(*pathsegments)

表示系统路径风格的通用类(实例化它将创建 PurePosixPath 或A PureWindowsPath ):

>>> PurePath('setup.py')      # Running on a Unix machine
PurePosixPath('setup.py')

每个元素 路径段 可以是表示路径段的字符串,也可以是实现 os.PathLike 返回字符串或其他路径对象的接口:

>>> PurePath('foo', 'some/path', 'bar')
PurePosixPath('foo/some/path/bar')
>>> PurePath(Path('foo'), Path('bar'))
PurePosixPath('foo/bar')

什么时候? 路径段 为空,假定当前目录为:

>>> PurePath()
PurePosixPath('.')

当给出几个绝对路径时,最后一个路径将作为锚(模拟 os.path.join() 的行为):

>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')
>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')

但是,在Windows路径中,更改本地根目录不会放弃以前的驱动器设置::

>>> PureWindowsPath('c:/Windows', '/Program Files')
PureWindowsPath('c:/Program Files')

假斜线和单点折叠,但双点 ('..' )不是,因为这会改变符号链接中路径的含义:

>>> PurePath('foo//bar')
PurePosixPath('foo/bar')
>>> PurePath('foo/./bar')
PurePosixPath('foo/bar')
>>> PurePath('foo/../bar')
PurePosixPath('foo/../bar')

(一个天真的方法会使 PurePosixPath('foo/../bar') 相当于 PurePosixPath('bar') ,如果 foo 是到另一个目录的符号链接)

纯路径对象实现 os.PathLike 接口,允许在接受接口的任何地方使用它们。

在 3.6 版更改: 增加了对 os.PathLike 接口。

class pathlib.PurePosixPath(*pathsegments)

一个子类 PurePath ,此路径风格表示非Windows文件系统路径::

>>> PurePosixPath('/etc')
PurePosixPath('/etc')

路径段 类似于 PurePath .

class pathlib.PureWindowsPath(*pathsegments)

一个子类 PurePath ,此路径风格表示Windows文件系统路径::

>>> PureWindowsPath('c:/Program Files/')
PureWindowsPath('c:/Program Files')

路径段 类似于 PurePath .

不管您运行的系统是什么,您都可以实例化所有这些类,因为它们不提供任何执行系统调用的操作。

常规属性

路径是不可变的和可散列的。相同味道的路径具有可比性和可订购性。这些属性尊重口味的折叠语义:

>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True

不同口味的路径比较不相等,无法排序::

>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'

算子

斜线运算符有助于创建子路径,类似于 os.path.join() ::

>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')

路径对象可以在对象实现的任何位置使用 os.PathLike 被接受:

>>> import os
>>> p = PurePath('/etc')
>>> os.fspath(p)
'/etc'

路径的字符串表示是原始文件系统路径本身(以本机形式,例如在Windows下使用反斜杠),可以将其传递给任何将文件路径作为字符串的函数:

>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'

同样,调用 bytes 在一个路径上,将原始文件系统路径作为一个字节对象,由 os.fsencode() ::

>>> bytes(p)
b'/etc'

注解

调用 bytes 仅建议在Unix下使用。在Windows下,Unicode形式是文件系统路径的规范表示。

访问单个部件

要访问路径的各个“部分”(组件),请使用以下属性:

PurePath.parts

允许访问路径的各个组件的元组:

>>> p = PurePath('/usr/bin/python3')
>>> p.parts
('/', 'usr', 'bin', 'python3')

>>> p = PureWindowsPath('c:/Program Files/PSF')
>>> p.parts
('c:\\', 'Program Files', 'PSF')

(注意驱动器和本地根目录是如何在单个部分中重新组合的)

方法和属性

纯路径提供以下方法和属性:

PurePath.drive

表示驱动器号或名称(如果有)的字符串:

>>> PureWindowsPath('c:/Program Files/').drive
'c:'
>>> PureWindowsPath('/Program Files/').drive
''
>>> PurePosixPath('/etc').drive
''

UNC共享也被视为驱动器:

>>> PureWindowsPath('//host/share/foo.txt').drive
'\\\\host\\share'
PurePath.root

表示(本地或全局)根的字符串,如果有::

>>> PureWindowsPath('c:/Program Files/').root
'\\'
>>> PureWindowsPath('c:Program Files/').root
''
>>> PurePosixPath('/etc').root
'/'

UNC共享始终具有根目录::

>>> PureWindowsPath('//host/share').root
'\\'
PurePath.anchor

驱动器和根目录的连接:

>>> PureWindowsPath('c:/Program Files/').anchor
'c:\\'
>>> PureWindowsPath('c:Program Files/').anchor
'c:'
>>> PurePosixPath('/etc').anchor
'/'
>>> PureWindowsPath('//host/share').anchor
'\\\\host\\share\\'
PurePath.parents

提供对路径逻辑祖先的访问的不可变序列:

>>> p = PureWindowsPath('c:/foo/bar/setup.py')
>>> p.parents[0]
PureWindowsPath('c:/foo/bar')
>>> p.parents[1]
PureWindowsPath('c:/foo')
>>> p.parents[2]
PureWindowsPath('c:/')

在 3.10 版更改: 父序列现在支持 slices 和负指标值。

PurePath.parent

路径的逻辑父级::

>>> p = PurePosixPath('/a/b/c/d')
>>> p.parent
PurePosixPath('/a/b/c')

不能经过锚或空路径::

>>> p = PurePosixPath('/')
>>> p.parent
PurePosixPath('/')
>>> p = PurePosixPath('.')
>>> p.parent
PurePosixPath('.')

注解

这是一个纯词汇操作,因此有以下行为:

>>> p = PurePosixPath('foo/..')
>>> p.parent
PurePosixPath('foo')

如果要向上移动任意文件系统路径,建议首先调用 Path.resolve() 以解决符号链接和消除 ".." 组件。

PurePath.name

表示最终路径组件的字符串,不包括驱动器和根目录(如果有)::

>>> PurePosixPath('my/library/setup.py').name
'setup.py'

不考虑UNC驱动器名::

>>> PureWindowsPath('//some/share/setup.py').name
'setup.py'
>>> PureWindowsPath('//some/share').name
''
PurePath.suffix

最终组件的文件扩展名(如果有):

>>> PurePosixPath('my/library/setup.py').suffix
'.py'
>>> PurePosixPath('my/library.tar.gz').suffix
'.gz'
>>> PurePosixPath('my/library').suffix
''
PurePath.suffixes

路径的文件扩展名列表:

>>> PurePosixPath('my/library.tar.gar').suffixes
['.tar', '.gar']
>>> PurePosixPath('my/library.tar.gz').suffixes
['.tar', '.gz']
>>> PurePosixPath('my/library').suffixes
[]
PurePath.stem

最后一个路径组件,不带后缀::

>>> PurePosixPath('my/library.tar.gz').stem
'library.tar'
>>> PurePosixPath('my/library.tar').stem
'library'
>>> PurePosixPath('my/library').stem
'library'
PurePath.as_posix()

返回带有正斜杠的路径的字符串表示形式 (/ ):

>>> p = PureWindowsPath('c:\\windows')
>>> str(p)
'c:\\windows'
>>> p.as_posix()
'c:/windows'
PurePath.as_uri()

将路径表示为 file URI。 ValueError 如果路径不是绝对路径,则引发。

>>> p = PurePosixPath('/etc/passwd')
>>> p.as_uri()
'file:///etc/passwd'
>>> p = PureWindowsPath('c:/Windows')
>>> p.as_uri()
'file:///c:/Windows'
PurePath.is_absolute()

返回路径是否为绝对路径。如果路径同时具有根和(如果口味允许)驱动器,则认为它是绝对路径:

>>> PurePosixPath('/a/b').is_absolute()
True
>>> PurePosixPath('a/b').is_absolute()
False

>>> PureWindowsPath('c:/a/b').is_absolute()
True
>>> PureWindowsPath('/a/b').is_absolute()
False
>>> PureWindowsPath('c:').is_absolute()
False
>>> PureWindowsPath('//some/share').is_absolute()
True
PurePath.is_relative_to(*other)

返回此路径是否与 其他 路径。

>>> p = PurePath('/etc/passwd')
>>> p.is_relative_to('/etc')
True
>>> p.is_relative_to('/usr')
False

3.9 新版功能.

PurePath.is_reserved()

PureWindowsPath 返回 True 如果该路径被认为是在Windows下保留的, False 否则。用 PurePosixPathFalse 总是返回。

>>> PureWindowsPath('nul').is_reserved()
True
>>> PurePosixPath('nul').is_reserved()
False

对保留路径的文件系统调用可能会神秘地失败或产生意想不到的效果。

PurePath.joinpath(*other)

调用此方法等同于将路径与 other 依次参数:

>>> PurePosixPath('/etc').joinpath('passwd')
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')
PurePosixPath('/etc/init.d/apache2')
>>> PureWindowsPath('c:').joinpath('/Program Files')
PureWindowsPath('c:/Program Files')
PurePath.match(pattern)

将此路径与提供的全局样式模式匹配。返回 True 如果匹配成功, False 否则。

如果 模式 是相对路径,路径可以是相对路径,也可以是绝对路径,从右侧进行匹配::

>>> PurePath('a/b.py').match('*.py')
True
>>> PurePath('/a/b/c.py').match('b/*.py')
True
>>> PurePath('/a/b/c.py').match('a/*.py')
False

如果 模式 是绝对路径,路径必须是绝对路径,并且整个路径必须匹配::

>>> PurePath('/a.py').match('/*.py')
True
>>> PurePath('a/b.py').match('/*.py')
False

与其他方法一样,区分大小写遵循平台默认值:

>>> PurePosixPath('b.py').match('*.PY')
False
>>> PureWindowsPath('b.py').match('*.PY')
True
PurePath.relative_to(*other)

计算此路径相对于由表示的路径的版本 other . 如果不可能,则会引发ValueError::

>>> p = PurePosixPath('/etc/passwd')
>>> p.relative_to('/')
PurePosixPath('etc/passwd')
>>> p.relative_to('/etc')
PurePosixPath('passwd')
>>> p.relative_to('/usr')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pathlib.py", line 694, in relative_to
    .format(str(self), str(formatted)))
ValueError: '/etc/passwd' is not in the subpath of '/usr' OR one path is relative and the other absolute.

注意:此函数是 PurePath 和弦一起工作。它不检查或访问底层文件结构。

PurePath.with_name(name)

用返回新路径 name 改变。如果原始路径没有名称,则会引发ValueError::

>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_name('setup.py')
PureWindowsPath('c:/Downloads/setup.py')
>>> p = PureWindowsPath('c:/')
>>> p.with_name('setup.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name
    raise ValueError("%r has an empty name" % (self,))
ValueError: PureWindowsPath('c:/') has an empty name
PurePath.with_stem(stem)

用返回新路径 stem 改变。如果原始路径没有名称,则会引发ValueError::

>>> p = PureWindowsPath('c:/Downloads/draft.txt')
>>> p.with_stem('final')
PureWindowsPath('c:/Downloads/final.txt')
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_stem('lib')
PureWindowsPath('c:/Downloads/lib.gz')
>>> p = PureWindowsPath('c:/')
>>> p.with_stem('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem
    return self.with_name(stem + self.suffix)
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name
    raise ValueError("%r has an empty name" % (self,))
ValueError: PureWindowsPath('c:/') has an empty name

3.9 新版功能.

PurePath.with_suffix(suffix)

用返回新路径 suffix 改变。如果原始路径没有后缀, 后缀 而是追加。如果 后缀 是空字符串,将删除原始后缀::

>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_suffix('.bz2')
PureWindowsPath('c:/Downloads/pathlib.tar.bz2')
>>> p = PureWindowsPath('README')
>>> p.with_suffix('.txt')
PureWindowsPath('README.txt')
>>> p = PureWindowsPath('README.txt')
>>> p.with_suffix('')
PureWindowsPath('README')

具体路径

具体路径是纯路径类的子类。除了后者提供的操作之外,它们还提供对路径对象进行系统调用的方法。有三种方法可以实例化具体路径:

class pathlib.Path(*pathsegments)

一个子类 PurePath ,此类表示系统路径风格的具体路径(实例化它将创建 PosixPath 或A WindowsPath ):

>>> Path('setup.py')
PosixPath('setup.py')

路径段 类似于 PurePath .

class pathlib.PosixPath(*pathsegments)

一个子类 PathPurePosixPath ,此类表示具体的非Windows文件系统路径::

>>> PosixPath('/etc')
PosixPath('/etc')

路径段 类似于 PurePath .

class pathlib.WindowsPath(*pathsegments)

一个子类 PathPureWindowsPath ,此类表示具体的Windows文件系统路径::

>>> WindowsPath('c:/Program Files/')
WindowsPath('c:/Program Files')

路径段 类似于 PurePath .

您只能实例化与您的系统对应的类风格(允许对不兼容的路径风格进行系统调用可能会导致应用程序中的错误或失败)::

>>> import os
>>> os.name
'posix'
>>> Path('setup.py')
PosixPath('setup.py')
>>> PosixPath('setup.py')
PosixPath('setup.py')
>>> WindowsPath('setup.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pathlib.py", line 798, in __new__
    % (cls.__name__,))
NotImplementedError: cannot instantiate 'WindowsPath' on your system

方法

除纯路径方法外,具体路径还提供以下方法。这些方法中的许多都可以提高 OSError 如果系统调用失败(例如,因为路径不存在)。

在 3.8 版更改: exists()is_dir()is_file()is_mount()is_symlink()is_block_device()is_char_device()is_fifo()is_socket() 现在回来 False 而不是对包含OS级别不可显示字符的路径引发异常。

classmethod Path.cwd()

返回表示当前目录的新路径对象(由返回 os.getcwd() ):

>>> Path.cwd()
PosixPath('/home/antoine/pathlib')
classmethod Path.home()

返回表示用户主目录的新路径对象(由返回 os.path.expanduser() 具有 ~ 建设):

>>> Path.home()
PosixPath('/home/antoine')

3.5 新版功能.

Path.stat()

返回A os.stat_result 包含此路径信息的对象,如 os.stat() . 每次调用此方法时都会查找结果。

>>> p = Path('setup.py')
>>> p.stat().st_size
956
>>> p.stat().st_mtime
1327883547.852554
Path.chmod(mode)

更改文件模式和权限,如 os.chmod() ::

>>> p = Path('setup.py')
>>> p.stat().st_mode
33277
>>> p.chmod(0o444)
>>> p.stat().st_mode
33060
Path.exists()

路径是否指向现有文件或目录::

>>> Path('.').exists()
True
>>> Path('setup.py').exists()
True
>>> Path('/etc').exists()
True
>>> Path('nonexistentfile').exists()
False

注解

如果路径指向符号链接, exists() 返回符号链接 指向 现有的文件或目录。

Path.expanduser()

返回扩展的新路径 ~~user 构造,由返回 os.path.expanduser() ::

>>> p = PosixPath('~/films/Monty Python')
>>> p.expanduser()
PosixPath('/home/eric/films/Monty Python')

3.5 新版功能.

Path.glob(pattern)

给定的相关的 模式 在该路径表示的目录中,生成所有匹配的文件(任何类型)::

>>> sorted(Path('.').glob('*.py'))
[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
>>> sorted(Path('.').glob('*/*.py'))
[PosixPath('docs/conf.py')]

** 模式是指“这个目录和所有子目录,递归地”。换言之,它支持递归全局处理:

>>> sorted(Path('.').glob('**/*.py'))
[PosixPath('build/lib/pathlib.py'),
 PosixPath('docs/conf.py'),
 PosixPath('pathlib.py'),
 PosixPath('setup.py'),
 PosixPath('test_pathlib.py')]

注解

使用“ ** “大目录树中的模式可能会消耗大量的时间。

提出一个 auditing event pathlib.Path.glob 带着论据 selfpattern .

Path.group()

返回拥有该文件的组的名称。 KeyError 如果在系统数据库中找不到文件的gid,则引发。

Path.is_dir()

返回 True 如果路径指向一个目录(或指向一个目录的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.is_file()

返回 True 如果路径指向常规文件(或指向常规文件的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.is_mount()

返回 True 如果路径是 mount point :文件系统中安装了不同文件系统的点。在posix上,函数检查 path 的父母, path/.. ,位于不同的设备上 path ,还是 path/..path 指向同一设备上的同一个i节点——这应该检测所有UNIX和POSIX变体的装入点。未在Windows上实现。

3.7 新版功能.

返回 True 如果路径指向符号链接, False 否则。

False 如果路径不存在,则返回;传播其他错误(如权限错误)。

Path.is_socket()

返回 True 如果路径指向一个Unix套接字(或指向Unix套接字的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.is_fifo()

返回 True 如果路径指向FIFO(或指向FIFO的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.is_block_device()

返回 True 如果路径指向块设备(或指向块设备的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.is_char_device()

返回 True 如果路径指向字符设备(或指向字符设备的符号链接), False 如果它指向另一种文件。

False 如果路径不存在或是断开的符号链接,也会返回;会传播其他错误(如权限错误)。

Path.iterdir()

当路径指向目录时,生成目录内容的路径对象:

>>> p = Path('docs')
>>> for child in p.iterdir(): child
...
PosixPath('docs/conf.py')
PosixPath('docs/_templates')
PosixPath('docs/make.bat')
PosixPath('docs/index.rst')
PosixPath('docs/_build')
PosixPath('docs/_static')
PosixPath('docs/Makefile')

这些子元素是按任意顺序生成的,而特殊条目 '.''..' 不包括在内。如果在创建迭代器后将文件从目录中删除或添加到目录中,则未指定是否包含该文件的路径对象。

Path.lchmod(mode)

类似于 Path.chmod() 但是,如果路径指向符号链接,则符号链接的模式将更改,而不是其目标模式。

Path.lstat()

类似于 Path.stat() 但是,如果路径指向符号链接,则返回符号链接的信息,而不是其目标的信息。

Path.mkdir(mode=511, parents=False, exist_ok=False)

在此给定路径创建一个新目录。如果 mode 是给定的,它与过程' umask 用于确定文件模式和访问标志的值。如果路径已经存在, FileExistsError 提高了。

如果 父母 如果为真,则根据需要创建此路径的所有缺少的父级;这些父级是使用默认权限创建的,而不使用 mode 考虑(模仿POSIX mkdir -p 命令)。

如果 父母 为false(默认值),缺少父级引发 FileNotFoundError .

如果 exist_ok 为假(默认值), FileExistsError 如果目标目录已存在,则引发。

如果 exist_ok 是真的, FileExistsError 异常将被忽略(与posix的行为相同 mkdir -p 命令),但仅当最后一个路径组件不是现有的非目录文件时。

在 3.5 版更改: 这个 exist_ok 已添加参数。

Path.open(mode='r', buffering=- 1, encoding=None, errors=None, newline=None)

打开路径指向的文件,如内置的 open() 功能:

>>> p = Path('setup.py')
>>> with p.open() as f:
...     f.readline()
...
'#!/usr/bin/env python3\n'
Path.owner()

返回拥有该文件的用户的名称。 KeyError 在系统数据库中找不到文件的uid时引发。

Path.read_bytes()

以字节对象的形式返回指向文件的二进制内容::

>>> p = Path('my_binary_file')
>>> p.write_bytes(b'Binary file contents')
20
>>> p.read_bytes()
b'Binary file contents'

3.5 新版功能.

Path.read_text(encoding=None, errors=None)

以字符串形式返回指向文件的解码内容::

>>> p = Path('my_text_file')
>>> p.write_text('Text file contents')
18
>>> p.read_text()
'Text file contents'

文件被打开然后关闭。可选参数的含义与中的相同 open() .

3.5 新版功能.

返回符号链接指向的路径(由 os.readlink() ):

>>> p = Path('mylink')
>>> p.symlink_to('setup.py')
>>> p.readlink()
PosixPath('setup.py')

3.9 新版功能.

Path.rename(target)

将此文件或目录重命名为给定的 目标 ,并返回指向 目标 . 关于UNIX,如果 目标 存在并且是一个文件,如果用户有权限,它将自动替换。 目标 可以是字符串或其他路径对象::

>>> p = Path('foo')
>>> p.open('w').write('some text')
9
>>> target = Path('bar')
>>> p.rename(target)
PosixPath('bar')
>>> target.open().read()
'some text'

目标路径可以是绝对路径或相对路径。相对于当前工作目录解释相对路径, not 路径对象的目录。

在 3.8 版更改: 添加返回值,返回新路径实例。

Path.replace(target)

将此文件或目录重命名为给定的 目标 ,并返回指向 目标 . 如果 目标 指向一个现有的文件或目录,它将被无条件替换。

目标路径可以是绝对路径或相对路径。相对于当前工作目录解释相对路径, not 路径对象的目录。

在 3.8 版更改: 添加返回值,返回新路径实例。

Path.resolve(strict=False)

使路径绝对化,解析任何符号链接。返回新的路径对象::

>>> p = Path()
>>> p
PosixPath('.')
>>> p.resolve()
PosixPath('/home/antoine/pathlib')

.. “还消除了组件(这是唯一的方法):”

>>> p = Path('docs/../setup.py')
>>> p.resolve()
PosixPath('/home/antoine/pathlib/setup.py')

如果路径不存在,并且 strictTrueFileNotFoundError 提高了。如果 strictFalse ,将尽可能地解析路径,并在不检查路径是否存在的情况下附加任何余数。如果沿分辨率路径遇到无限循环, RuntimeError 提高了。

3.6 新版功能: 这个 严格的 论点(3.6之前的行为是严格的)。

Path.rglob(pattern)

这就像调用 Path.glob() 用 "**/" added in front of the given relative * 模式*:

>>> sorted(Path().rglob("*.py"))
[PosixPath('build/lib/pathlib.py'),
 PosixPath('docs/conf.py'),
 PosixPath('pathlib.py'),
 PosixPath('setup.py'),
 PosixPath('test_pathlib.py')]

提出一个 auditing event pathlib.Path.rglob 带着论据 selfpattern .

Path.rmdir()

删除此目录。目录必须为空。

Path.samefile(other_path)

返回此路径是否指向与 other_path ,可以是路径对象,也可以是字符串。语义类似于 os.path.samefile()os.path.samestat() .

OSError 如果由于某种原因无法访问其中一个文件,则可以引发。

>>> p = Path('spam')
>>> q = Path('eggs')
>>> p.samefile(q)
False
>>> p.samefile('spam')
True

3.5 新版功能.

使此路径成为指向的符号链接 目标 . 在Windows之下, target_is_directory 必须为真(默认 False )如果链接的目标是目录。在POSIX下, target_is_directory 的值被忽略。

>>> p = Path('mylink')
>>> p.symlink_to('setup.py')
>>> p.resolve()
PosixPath('/home/antoine/pathlib/setup.py')
>>> p.stat().st_size
956
>>> p.lstat().st_size
8

注解

参数(链接、目标)的顺序与 os.symlink() s。

Path.touch(mode=438, exist_ok=True)

在此给定路径创建文件。如果 mode 是给定的,它与过程' umask 用于确定文件模式和访问标志的值。如果文件已存在,则函数在以下情况下成功: exist_ok 为真(其修改时间更新为当前时间),否则 FileExistsError 提高了。

删除此文件或符号链接。如果路径指向目录,请使用 Path.rmdir() 相反。

如果 missing_ok 为假(默认值), FileNotFoundError 如果路径不存在,则引发。

如果 missing_ok 是真的, FileNotFoundError 异常将被忽略(与posix的行为相同 rm -f 命令)。

在 3.8 版更改: 这个 missing_ok 已添加参数。

创建指向名为 目标 .

3.8 新版功能.

Path.write_bytes(data)

以字节模式打开指向的文件,写入 data 关闭文件:

>>> p = Path('my_binary_file')
>>> p.write_bytes(b'Binary file contents')
20
>>> p.read_bytes()
b'Binary file contents'

将覆盖同名的现有文件。

3.5 新版功能.

Path.write_text(data, encoding=None, errors=None, newline=None)

在文本模式下打开指向的文件,写入 data 关闭文件:

>>> p = Path('my_text_file')
>>> p.write_text('Text file contents')
18
>>> p.read_text()
'Text file contents'

将覆盖同名的现有文件。可选参数的含义与 open() .

3.5 新版功能.

在 3.10 版更改: 这个 NEWLINE 参数已添加。

与中的工具对应 os 模块

下面是一个表映射 os functions to their corresponding PurePath/Path 当量。

注解

并不是下面的所有函数/方法对都是等价的。它们中的一些,尽管有一些重叠的用例,但具有不同的语义。它们包括 os.path.abspath()Path.resolve()os.path.relpath()PurePath.relative_to()

os and os.path

pathlib

os.path.abspath()

Path.resolve() 1

os.chmod()

Path.chmod()

os.mkdir()

Path.mkdir()

os.makedirs()

Path.mkdir()

os.rename()

Path.rename()

os.replace()

Path.replace()

os.rmdir()

Path.rmdir()

os.remove(), os.unlink()

Path.unlink()

os.getcwd()

Path.cwd()

os.path.exists()

Path.exists()

os.path.expanduser()

Path.expanduser() and Path.home()

os.listdir()

Path.iterdir()

os.path.isdir()

Path.is_dir()

os.path.isfile()

Path.is_file()

os.path.islink()

Path.is_symlink()

os.link()

Path.link_to()

os.symlink()

Path.symlink_to()

os.readlink()

Path.readlink()

os.path.relpath()

Path.relative_to() 2

os.stat()

Path.stat(), Path.owner(), Path.group()

os.path.isabs()

PurePath.is_absolute()

os.path.join()

PurePath.joinpath()

os.path.basename()

PurePath.name

os.path.dirname()

PurePath.parent

os.path.samefile()

Path.samefile()

os.path.splitext()

PurePath.suffix

脚注

1

os.path.abspath() 时不解析符号链接 Path.resolve() 确实如此。

2

Path.relative_to() 需要 self 作为参数的子路径,但是 os.path.relpath() 不会的。