Python(pathlib模块)
Blog:博客园 个人关于panthlib模块 pathlib模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。
文章图片
以下是一个映射了
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')
文件修改
当
target
是string
时,重命名文件或文件夹;当target
是Path
时,重命名并移动文件或文件夹。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)
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- SpringBoot调用公共模块的自定义注解失效的解决
- Node.js中readline模块实现终端输入
- python自定义封装带颜色的logging模块
- 解决SpringBoot引用别的模块无法注入的问题
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Apache多路复用模块(MPMs)介绍