关于panthlib模块 pathlib模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。
以下是一个映射了 os
与 PurePath/Path
对应相同的函数的表。
💡注意:尽管 os.path.relpath()
和 PurePath.relative_to()
拥有相同的重叠的用例,但是它们语义相差很大,不能认为它们等价。
💡Tips:os模块的写法是函数式的,由内到外需要一层一层剥开,而pathlib模块是链式写法,从左到右理解,相较于从内到外理解更加清晰。
基础使用 列出子目录 1 2 3 4 >>> from pathlib import Path >>> p = Path('.' )>>> [x for x in p.iterdir() if x.is_dir()][PosixPath('.pip' ), PosixPath('.pki' ), PosixPath('.ansible' ), PosixPath('.ssh' ), PosixPath('.cache' )]
查询路径属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>> p = Path('.' )>>> p.exists() True >>> p.is_dir() True >>> p.is_file() False >>> p.is_absolute() False >>> path = Path('/tmp/aaa.txt' )>>> path.name 'aaa.txt' >>> path.stem 'aaa' >>> path.suffix '.txt' >>> path.parent PosixPath('/tmp' ) >>> path.root '/' >>> path.parts ('/' , 'tmp' , 'aaa.txt' ) >>> path.stat() os.stat_result(st_mode=33188 , st_ino=134896383 , st_dev=64768 , st_nlink=1 , st_uid=0 , st_gid=0 , st_size=4 , st_atime=1645078071 , st_mtime=1645078071 , st_ctime=1645078071 ) >>> path.resolve() PosixPath('/tmp/aaa.txt' ) >>> path.cwd() PosixPath('/tmp' ) >>> path.home() PosixPath('/root' )
文件修改 当target
是string
时,重命名文件或文件夹;当target
是Path
时,重命名并移动文件或文件夹。
重命名当前文件或文件夹,如果target
所指示的文件或文件夹已存在,则覆盖原文件。
path为空文件夹的时候,删除该文件夹
1 2 3 4 5 6 >>> path = Path('/tmp/aaa' )>>> path.exists()True >>> path.rmdir()>>> path.exists()False
删除文件或目录,目录非空触发异常。
1 2 3 4 5 6 7 >>> path = Path('/tmp/bbb' )>>> path.unlink()Traceback (most recent call last): File "<stdin>" , line 1 , in <module> File "/usr/local/python3/lib/python3.8/pathlib.py" , line 1324 , in unlink self._accessor.unlink(self) IsADirectoryError: [Errno 21 ] Is a directory: '/tmp/bbb'
根据路径创建文件夹,parents=True
时,会依次创建路径中间缺少的文件夹。
1 2 3 4 5 6 7 8 >>> path = Path('/tmp/aaa/bbb/ccc' )>>> path.mkdir()Traceback (most recent call last): File "<stdin>" , line 1 , in <module> File "/usr/local/python3/lib/python3.8/pathlib.py" , line 1287 , in mkdir self._accessor.mkdir(self, mode) FileNotFoundError: [Errno 2 ] No such file or directory: '/tmp/aaa/bbb/ccc' >>> path.mkdir(parents=True )