【转载】 Python:pathlib模块

转载博客:https://www.cnblogs.com/Rohn/p/15907222.html

关于panthlib模块

pathlib模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。

以下是一个映射了 os 与 PurePath/Path 对应相同的函数的表。

💡注意:尽管 os.path.relpath()PurePath.relative_to()
拥有相同的重叠的用例,但是它们语义相差很大,不能认为它们等价。

os 和 os.pathpathlib
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 "<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时,会依次创建路径中间缺少的文件夹。

>>> 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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值