pathlib --- 面向对象的文件系统路径— Python 3.10.4 文档
文章推薦指數: 80 %
当给出一些绝对路径,最后一位将被当作锚(模仿 os.path.join() 的行为): >>> >>> PurePath('/etc', '/usr', 'lib64') PurePosixPath('/usr/lib64') ...
导航
索引
模块|
下一页|
上一页|
Python»
3.10.4Documentation»
Python标准库»
文件和目录访问»
pathlib---面向对象的文件系统路径
|
pathlib---面向对象的文件系统路径¶
3.4新版功能.
源代码Lib/pathlib.py
该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。
路径类被分为提供纯计算操作而没有I/O的纯路径,以及从纯路径继承而来但提供I/O操作的具体路径。
如果以前从未用过此模块,或不确定哪个类适合完成任务,那要用的可能就是Path。
它在运行代码的平台上实例化为具体路径。
在一些用例中纯路径很有用,例如:
如果你想要在Unix设备上操作Windows路径(或者相反)。
你不应在Unix上实例化一个WindowsPath,但是你可以实例化PureWindowsPath。
你只想操作路径但不想实际访问操作系统。
在这种情况下,实例化一个纯路径是有用的,因为它们没有任何访问操作系统的操作。
参见
PEP428:pathlib模块--面向对象的的文件系统路径。
参见
对于底层的路径字符串操作,你也可以使用os.path模块。
基础使用¶
导入主类:
>>>frompathlibimportPath
列出子目录:
>>>p=Path('.')
>>>[xforxinp.iterdir()ifx.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
打开一个文件:
>>>withq.open()asf:f.readline()
...
'#!/bin/bash\n'
纯路径¶
纯路径对象提供了不实际访问文件系统的路径处理操作。
有三种方式来访问这些类,也是不同的风格:
classpathlib.PurePath(*pathsegments)¶
一个通用的类,代表当前系统的路径风格(实例化为PurePosixPath或者PureWindowsPath):
>>>PurePath('setup.py')#RunningonaUnixmachine
PurePosixPath('setup.py')
每一个pathsegments的元素可能是一个代表路径片段的字符串,一个返回字符串的实现了os.PathLike接口的对象,或者另一个路径对象:
>>>PurePath('foo','some/path','bar')
PurePosixPath('foo/some/path/bar')
>>>PurePath(Path('foo'),Path('bar'))
PurePosixPath('foo/bar')
当pathsegments为空的时候,假定为当前目录:
>>>PurePath()
PurePosixPath('.')
当给出一些绝对路径,最后一位将被当作锚(模仿os.path.join()的行为):
>>>PurePath('/etc','/usr','lib64')
PurePosixPath('/usr/lib64')
>>>PureWindowsPath('c:/Windows','d:bar')
PureWindowsPath('d:bar')
但是,在Windows路径中,改变本地根目录并不会丢弃之前盘符的设置:
>>>PureWindowsPath('c:/Windows','/ProgramFiles')
PureWindowsPath('c:/ProgramFiles')
假斜线和单独的点都会被消除,但是双点(‘..’)不会,以防改变符号链接的含义。
>>>PurePath('foo//bar')
PurePosixPath('foo/bar')
>>>PurePath('foo/./bar')
PurePosixPath('foo/bar')
>>>PurePath('foo/../bar')
PurePosixPath('foo/../bar')
(一个很naïve的做法是让PurePosixPath('foo/../bar')等同于PurePosixPath('bar'),如果foo是一个指向其他目录的符号链接那么这个做法就将出错)
纯路径对象实现了os.PathLike接口,允许它们在任何接受此接口的地方使用。
在3.6版更改:添加了os.PathLike接口支持。
classpathlib.PurePosixPath(*pathsegments)¶
一个PurePath的子类,路径风格不同于Windows文件系统:
>>>PurePosixPath('/etc')
PurePosixPath('/etc')
pathsegments参数的指定和PurePath相同。
classpathlib.PureWindowsPath(*pathsegments)¶
PurePath的一个子类,路径风格为Windows文件系统路径:
>>>PureWindowsPath('c:/ProgramFiles/')
PureWindowsPath('c:/ProgramFiles')
pathsegments参数的指定和PurePath相同。
无论你正运行什么系统,你都可以实例化这些类,因为它们提供的操作不做任何系统调用。
通用性质¶
路径是不可变并可哈希的。
相同风格的路径可以排序与比较。
这些性质尊重对应风格的大小写转换语义:
>>>PurePosixPath('foo')==PurePosixPath('FOO')
False
>>>PureWindowsPath('foo')==PureWindowsPath('FOO')
True
>>>PureWindowsPath('FOO')in{PureWindowsPath('foo')}
True
>>>PureWindowsPath('C:')
>>>importos
>>>p=PurePath('/etc')
>>>os.fspath(p)
'/etc'
路径的字符串表示法为它自己原始的文件系统路径(以原生形式,例如在Windows下使用反斜杠)。
你可以传递给任何需要字符串形式路径的函数。
>>>p=PurePath('/etc')
>>>str(p)
'/etc'
>>>p=PureWindowsPath('c:/ProgramFiles')
>>>str(p)
'c:\\ProgramFiles'
类似地,在路径上调用bytes将原始文件系统路径作为字节对象给出,就像被os.fsencode()编码一样:
>>>bytes(p)
b'/etc'
注解
只推荐在Unix下调用bytes。
在Windows,unicode形式是文件系统路径的规范表示法。
访问个别部分¶
为了访问路径独立的部分(组件),使用以下特征属性:
PurePath.parts¶
一个元组,可以访问路径的多个组件:
>>>p=PurePath('/usr/bin/python3')
>>>p.parts
('/','usr','bin','python3')
>>>p=PureWindowsPath('c:/ProgramFiles/PSF')
>>>p.parts
('c:\\','ProgramFiles','PSF')
(注意盘符和本地根目录是如何重组的)
方法和特征属性¶
纯路径提供以下方法和特征属性:
PurePath.drive¶
一个表示驱动器盘符或命名的字符串,如果存在:
>>>PureWindowsPath('c:/ProgramFiles/').drive
'c:'
>>>PureWindowsPath('/ProgramFiles/').drive
''
>>>PurePosixPath('/etc').drive
''
UNC分享也被认作驱动器:
>>>PureWindowsPath('//host/share/foo.txt').drive
'\\\\host\\share'
PurePath.root¶
一个表示(本地或全局)根的字符串,如果存在:
>>>PureWindowsPath('c:/ProgramFiles/').root
'\\'
>>>PureWindowsPath('c:ProgramFiles/').root
''
>>>PurePosixPath('/etc').root
'/'
UNC分享一样拥有根:
>>>PureWindowsPath('//host/share').root
'\\'
PurePath.anchor¶
驱动器和根的联合:
>>>PureWindowsPath('c:/ProgramFiles/').anchor
'c:\\'
>>>PureWindowsPath('c:ProgramFiles/').anchor
'c:'
>>>PurePosixPath('/etc').anchor
'/'
>>>PureWindowsPath('//host/share').anchor
'\\\\host\\share\\'
PurePath.parents¶
Animmutablesequenceprovidingaccesstothelogicalancestorsof
thepath:
>>>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版更改:parents序列现在支持切片负的索引值。
PurePath.parent¶
此路径的逻辑父路径:
>>>p=PurePosixPath('/a/b/c/d')
>>>p.parent
PurePosixPath('/a/b/c')
你不能超过一个anchor或空路径:
>>>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()¶
将路径表示为fileURL。
如果并非绝对路径,抛出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)¶
返回此路径是否相对于other的路径。
>>>p=PurePath('/etc/passwd')
>>>p.is_relative_to('/etc')
True
>>>p.is_relative_to('/usr')
False
3.9新版功能.
PurePath.is_reserved()¶
在PureWindowsPath,如果路径是被Windows保留的则返回True,否则False。
在PurePosixPath,总是返回False。
>>>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('/ProgramFiles')
PureWindowsPath('c:/ProgramFiles')
PurePath.match(pattern)¶
将此路径与提供的通配符风格的模式匹配。
如果匹配成功则返回True,否则返回False。
如果pattern是相对的,则路径可以是相对路径或绝对路径,并且匹配是从右侧完成的:
>>>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
如果pattern是绝对的,则路径必须是绝对的,并且路径必须完全匹配:
>>>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(mostrecentcalllast):
File"
它不会检查或访问下层的文件结构。
PurePath.with_name(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(mostrecentcalllast):
File"
如果原路径没有名称,则会引发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(mostrecentcalllast):
File"
如果原本的路径没有后缀,新的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')
具体路径¶
具体路径是纯路径的子类。
除了后者提供的操作之外,它们还提供了对路径对象进行系统调用的方法。
有三种方法可以实例化具体路径:
classpathlib.Path(*pathsegments)¶
一个PurePath的子类,此类以当前系统的路径风格表示路径(实例化为PosixPath或WindowsPath):
>>>Path('setup.py')
PosixPath('setup.py')
pathsegments参数的指定和PurePath相同。
classpathlib.PosixPath(*pathsegments)¶
一个Path和PurePosixPath的子类,此类表示一个非Windows文件系统的具体路径:
>>>PosixPath('/etc')
PosixPath('/etc')
pathsegments参数的指定和PurePath相同。
classpathlib.WindowsPath(*pathsegments)¶
Path和PureWindowsPath的子类,从类表示一个Windows文件系统的具体路径:
>>>WindowsPath('c:/ProgramFiles/')
WindowsPath('c:/ProgramFiles')
pathsegments参数的指定和PurePath相同。
你只能实例化与当前系统风格相同的类(允许系统调用作用于不兼容的路径风格可能在应用程序中导致缺陷或失败):
>>>importos
>>>os.name
'posix'
>>>Path('setup.py')
PosixPath('setup.py')
>>>PosixPath('setup.py')
PosixPath('setup.py')
>>>WindowsPath('setup.py')
Traceback(mostrecentcalllast):
File"
如果系统调用失败(例如因为路径不存在)这些方法中许多都会引发OSError。
在3.8版更改:对于包含OS层级无法表示字符的路径,exists(),is_dir(),is_file(),is_mount(),is_symlink(),is_block_device(),is_char_device(),is_fifo(),is_socket()现在将返回False而不是引发异常。
classmethodPath.cwd()¶
返回一个新的表示当前目录的路径对象(和os.getcwd()返回的相同):
>>>Path.cwd()
PosixPath('/home/antoine/pathlib')
classmethodPath.home()¶
返回一个表示用户家目录的新路径对象(与带~构造的os.path.expanduser()所返回的相同)。
如果无法解析家目录,则会引发RuntimeError。
>>>Path.home()
PosixPath('/home/antoine')
3.5新版功能.
Path.stat(*,follow_symlinks=True)¶
返回一个os.stat_result对象,其中包含有关此路径的信息,例如os.stat()。
结果会在每次调用此方法时重新搜索。
此方法通常会跟随符号链接;要对symlink使用stat请添加参数follow_symlinks=False,或者使用lstat()。
>>>p=Path('setup.py')
>>>p.stat().st_size
956
>>>p.stat().st_mtime
1327883547.852554
在3.10版更改:增加了follow_symlinks形参。
Path.chmod(mode,*,follow_symlinks=True)¶
改变文件模式和权限,和os.chmod()一样。
此方法通常会跟随符号链接。
某些Unix变种支持改变symlink本身的权限;在这些平台上你可以添加参数follow_symlinks=False,或者使用lchmod()。
>>>p=Path('setup.py')
>>>p.stat().st_mode
33277
>>>p.chmod(0o444)
>>>p.stat().st_mode
33060
在3.10版更改:增加了follow_symlinks形参。
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()所返回的相同。
如果无法解析家目录,则会引发RuntimeError。
>>>p=PosixPath('~/films/MontyPython')
>>>p.expanduser()
PosixPath('/home/eric/films/MontyPython')
3.5新版功能.
Path.glob(pattern)¶
解析相对于此路径的通配符pattern,产生所有匹配的文件:
>>>sorted(Path('.').glob('*.py'))
[PosixPath('pathlib.py'),PosixPath('setup.py'),PosixPath('test_pathlib.py')]
>>>sorted(Path('.').glob('*/*.py'))
[PosixPath('docs/conf.py')]
pattern的形式与fnmatch的相同,还增加了"**"表示"此目录以及所有子目录,递归"。
换句话说,它启用递归通配:
>>>sorted(Path('.').glob('**/*.py'))
[PosixPath('build/lib/pathlib.py'),
PosixPath('docs/conf.py'),
PosixPath('pathlib.py'),
PosixPath('setup.py'),
PosixPath('test_pathlib.py')]
注解
在一个较大的目录树中使用"**"模式可能会消耗非常多的时间。
引发一个审计事件pathlib.Path.glob附带参数self,pattern。
Path.group()¶
返回拥有此文件的用户组。
如果文件的GID无法在系统数据库中找到,将抛出KeyError。
Path.is_dir()¶
如果路径指向一个目录(或者一个指向目录的符号链接)则返回True,如果指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.is_file()¶
如果路径指向一个正常的文件(或者一个指向正常文件的符号链接)则返回True,如果指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.is_mount()¶
如果路径是一个挂载点
在POSIX系统,此函数检查path的父级——path/..是否处于一个和path不同的设备中,或者file:path/..和path是否指向相同设备的相同i-node——这能检测所有Unix以及POSIX变种上的挂载点。
Windows上未实现。
3.7新版功能.
Path.is_symlink()¶
如果路径指向符号链接则返回True,否则False。
如果路径不存在也返回False;其他错误(例如权限错误)被传播。
Path.is_socket()¶
如果路径指向一个Unixsocket文件(或者指向Unixsocket文件的符号链接)则返回True,如果指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.is_fifo()¶
如果路径指向一个先进先出存储(或者指向先进先出存储的符号链接)则返回True,指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.is_block_device()¶
如果文件指向一个块设备(或者指向块设备的符号链接)则返回True,指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.is_char_device()¶
如果路径指向一个字符设备(或指向字符设备的符号链接)则返回True,指向其他类型的文件则返回False。
当路径不存在或者是一个破损的符号链接时也会返回False;其他错误(例如权限错误)被传播。
Path.iterdir()¶
当路径指向一个目录时,产生该路径下的对象的路径:
>>>p=Path('docs')
>>>forchildinp.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')
Thechildrenareyieldedinarbitraryorder,andthespecialentries
'.'and'..'arenotincluded.Ifafileisremovedfromoradded
tothedirectoryaftercreatingtheiterator,whetherapathobjectfor
thatfilebeincludedisunspecified.
Path.lchmod(mode)¶
就像Path.chmod()但是如果路径指向符号链接则是修改符号链接的模式,而不是修改符号链接的目标。
Path.lstat()¶
就和Path.stat()一样,但是如果路径指向符号链接,则是返回符号链接而不是目标的信息。
Path.mkdir(mode=511,parents=False,exist_ok=False)¶
新建给定路径的目录。
如果给出了mode,它将与当前进程的umask值合并来决定文件模式和访问标志。
如果路径已经存在,则抛出FileExistsError。
如果parents为true,任何找不到的父目录都会伴随着此路径被创建;它们会以默认权限被创建,而不考虑mode设置(模仿POSIX的mkdir-p命令)。
如果parents为false(默认),则找不到的父级目录会导致FileNotFoundError被抛出。
如果exist_ok为false(默认),则在目标已存在的情况下抛出FileExistsError。
如果exist_ok为true,则FileExistsError异常将被忽略(和POSIXmkdir-p命令行为相同),但是只有在最后一个路径组件不是现存的非目录文件时才生效。
在3.5版更改:exist_ok形参被加入。
Path.open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)¶
打开路径指向的文件,就像内置的open()函数所做的一样:
>>>p=Path('setup.py')
>>>withp.open()asf:
...f.readline()
...
'#!/usr/bin/envpython3\n'
Path.owner()¶
返回拥有此文件的用户名。
如果文件的UID无法在系统数据库中找到,则抛出KeyError。
Path.read_bytes()¶
以字节对象的形式返回路径指向的文件的二进制内容:
>>>p=Path('my_binary_file')
>>>p.write_bytes(b'Binaryfilecontents')
20
>>>p.read_bytes()
b'Binaryfilecontents'
3.5新版功能.
Path.read_text(encoding=None,errors=None)¶
以字符串形式返回路径指向的文件的解码后文本内容。
>>>p=Path('my_text_file')
>>>p.write_text('Textfilecontents')
18
>>>p.read_text()
'Textfilecontents'
文件先被打开然后关闭。
有和open()一样的可选形参。
3.5新版功能.
Path.readlink()¶
返回符号链接所指向的路径(即os.readlink()的返回值):
>>>p=Path('mylink')
>>>p.symlink_to('setup.py')
>>>p.readlink()
PosixPath('setup.py')
3.9新版功能.
Path.rename(target)¶
将文件或目录重命名为给定的target,并返回一个新的指向target的Path实例。
在Unix上,如果target存在且为一个文件,如果用户有足够权限,则它将被静默地替换。
target可以是一个字符串或者另一个路径对象:
>>>p=Path('foo')
>>>p.open('w').write('sometext')
9
>>>target=Path('bar')
>>>p.rename(target)
PosixPath('bar')
>>>target.open().read()
'sometext'
目标路径可能为绝对或相对路径。
相对路径将被解释为相对于当前工作目录,而不是相对于Path对象的目录。
在3.8版更改:添加了返回值,返回新的Path实例。
Path.replace(target)¶
将文件名目录重命名为给定的target,并返回一个新的指向target的Path实例。
如果target指向一个现有文件或目录,则它将被无条件地替换。
目标路径可能为绝对或相对路径。
相对路径将被解释为相对于当前工作目录,而不是相对于Path对象的目录。
在3.8版更改:添加了返回值,返回新的Path实例。
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')
如果路径不存在并且strict设为True,则抛出FileNotFoundError。
如果strict为False,则路径将被尽可能地解析并且任何剩余部分都会被不检查是否存在地追加。
如果在解析路径上发生无限循环,则抛出RuntimeError。
3.6新版功能:加入*strict*参数(3.6之前的版本相当于strict值为True)
Path.rglob(pattern)¶
这就像调用Path.glob`时在给定的相对*pattern*前面添加了"``**/`()"
>>>sorted(Path().rglob("*.py"))
[PosixPath('build/lib/pathlib.py'),
PosixPath('docs/conf.py'),
PosixPath('pathlib.py'),
PosixPath('setup.py'),
PosixPath('test_pathlib.py')]
引发一个审计事件pathlib.Path.rglob附带参数self,pattern。
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新版功能.
Path.symlink_to(target,target_is_directory=False)¶
将此路径创建为指向target的符号链接。
在Windows下,如果链接的目标是一个目录则target_is_directory必须为true(默认为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
注解
参数的顺序(link,target)和os.symlink()是相反的。
Path.hardlink_to(target)¶
将此路径设为一个指向与target相同文件的硬链接。
注解
参数顺序(link,target)和os.link()是相反的。
3.10新版功能.
Path.link_to(target)¶
创建硬链接target指向此路径。
警告
此函数不会将此路径设为指向target的硬链接,尽管此函数名和参数名有此含义。
参数顺序(target,link)与Path.symlink_to()和Path.hardlink_to()相反,而与os.link()的一致。
3.8新版功能.
3.10版后已移除:此方法已被弃用而建议改用Path.hardlink_to(),因为Path.link_to()的参数顺序与Path.symlink_to()的不相匹配。
Path.touch(mode=438,exist_ok=True)¶
将给定的路径创建为文件。
如果给出了mode它将与当前进程的umask值合并以确定文件的模式和访问标志。
如果文件已经存在,则当exist_ok为true则函数仍会成功(并且将它的修改事件更新为当前事件),否则抛出FileExistsError。
Path.unlink(missing_ok=False)¶
移除此文件或符号链接。
如果路径指向目录,则用Path.rmdir()代替。
如果missing_ok为假值(默认),则如果路径不存在将会引发FileNotFoundError。
如果missing_ok为真值,则FileNotFoundError异常将被忽略(和POSIXrm-f命令的行为相同)。
在3.8版更改:增加了missing_ok形参。
Path.write_bytes(data)¶
将文件以二进制模式打开,写入data并关闭:
>>>p=Path('my_binary_file')
>>>p.write_bytes(b'Binaryfilecontents')
20
>>>p.read_bytes()
b'Binaryfilecontents'
一个同名的现存文件将被覆盖。
3.5新版功能.
Path.write_text(data,encoding=None,errors=None,newline=None)¶
将文件以文本模式打开,写入data并关闭:
>>>p=Path('my_text_file')
>>>p.write_text('Textfilecontents')
18
>>>p.read_text()
'Textfilecontents'
同名的现有文件会被覆盖。
可选形参的含义与open()的相同。
3.5新版功能.
在3.10版更改:增加了newline形参。
对应的os模块的工具¶
以下是一个映射了os与PurePath/Path对应相同的函数的表。
注解
以下函数/方法对并不完全等价。
它们有些虽然具有相互重叠的使用场景,但语义并不相同。
这包括了os.path.abspath()和Path.resolve(),以及os.path.relpath()和PurePath.relative_to()。
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()和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.hardlink_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()则不要求。
目录
pathlib---面向对象的文件系统路径
基础使用
纯路径
通用性质
运算符
访问个别部分
方法和特征属性
具体路径
方法
对应的os模块的工具
上一个主题
文件和目录访问
下一个主题
os.path---常用路径操作
本页
提交Bug
显示源代码
导航
索引
模块|
下一页|
上一页|
Python»
3.10.4Documentation»
Python标准库»
文件和目录访问»
pathlib---面向对象的文件系统路径
|
"
延伸文章資訊
- 1(python)使用pathlib替代os.path(轉錄) - Medium
而在Python 3.4,標準庫添加了新的模組- pathlib,它使用面向物件的程式設計方式來表示檔案系統路徑。 ... 過去路徑拼接最正確的方法是用 os.path.join :
- 2python pathlib join paths Code Example
import os # Join paths using OS import. Takes any amount of arguments path = os.path.join('/var/w...
- 3pathlib — Object-oriented filesystem paths — Python 3.10.4 ...
PEP 428: The pathlib module – object-oriented filesystem paths. See also ... The slash operator h...
- 4Don't Use Python OS Library Any More When Pathlib Can Do
- 5Why you should be using pathlib - Trey Hunner