Python(pathlib模块)

Blog:博客园 个人
关于panthlib模块 pathlib模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。
Python(pathlib模块)
文章图片

以下是一个映射了 os PurePath/Path 对应相同的函数的表。
注意:尽管 os.path.relpath()PurePath.relative_to() 拥有相同的重叠的用例,但是它们语义相差很大,不能认为它们等价。
os 和 os.path pathlib
os.path.abspath() Path.resolve()
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.link_to()
os.symlink() Path.symlink_to()
os.readlink() Path.readlink()
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
Tips:os模块的写法是函数式的,由内到外需要一层一层剥开,而pathlib模块是链式写法,从左到右理解,相较于从内到外理解更加清晰。
基础使用 列出子目录
>>> 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')]

查询路径属性
>>> 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')

文件修改
targetstring时,重命名文件或文件夹;当targetPath时,重命名并移动文件或文件夹。
path.rename(target)

重命名当前文件或文件夹,如果target所指示的文件或文件夹已存在,则覆盖原文件。
path.replace(target)

path为空文件夹的时候,删除该文件夹
>>> path = Path('/tmp/aaa') >>> path.exists() True >>> path.rmdir() >>> path.exists() False

删除文件或目录,目录非空触发异常。
>>> path = Path('/tmp/bbb') >>> path.unlink() Traceback (most recent call last): File "", line 1, in 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'

【Python(pathlib模块)】根据路径创建文件夹,parents=True时,会依次创建路径中间缺少的文件夹。
>>> path = Path('/tmp/aaa/bbb/ccc') >>> path.mkdir() Traceback (most recent call last): File "", line 1, in 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)

    推荐阅读