相信你一定用os库对文件系统进行过操作,比如文件读写,路径组合,上传下载等都会涉及到文件路径。但是某些操作使用os库就很不优雅,例如查找上级路径,不同操作系统间的路径处理等。今天我们就介绍一个Python内置的面向对象的路径库pathlib。

1、获取当前文件所在路径

from os import path
exec_path = path.dirname(__file__)
print(exec_path,type(exec_path))




from pathlib import Path,PurePath
cur_path = Path(__file__).parent
print(cur_path,type(cur_path))

运行结果:

e:/TestProject/iaas/test_data <class 'str'>
e:\TestProject\iaas\test_data <class 'pathlib.WindowsPath'>

总结:

  • os库返回的路径是str对象
  • 而pathlib返回的路径是一个WindowsPath的对象
  • WindowsPath对象有很多路径的属性,而str只有str的属性

2、获取当前文件的名称

from os import path
exec_path = path.basename(__file__)
print(exec_path,type(exec_path))




from pathlib import Path,PurePath
cur_path = Path(__file__).name
print(cur_path,type(cur_path))

运行结果:

t_test.py <class 'str'>
t_test.py <class 'str'>

总结:

  • os的库获取当前文件名称需要使用basename方法实现
  • pathlib获取当前文件名称只需要获取name属性的值即可

3、查找父路径

from os import path,getcwd
'''
cur_path:当前路径
par_path:父路径
gra_path:父父路径
'''
cur_path = path.dirname(__file__)
par_path = path.dirname(path.dirname(__file__))
gra_path = path.dirname(path.dirname(path.dirname(__file__)))
print(cur_path)
print(par_path)
print(gra_path)




from pathlib import Path,PurePath
cur_path = Path(__file__).parent
par_path = cur_path.parent
gra_path = par_path.parent
print(cur_path)
print(par_path)
print(gra_path)

运行结果:

e:/TestProject/iaas/test_data
e:/TestProject/iaas
e:/TestProject
e:\TestProject\iaas\test_data
e:\TestProject\iaas
e:\TestProject

总结:pathlib的方式要比os的方式优雅甚多,突出体现了面向对象的优势。

4、pathlib的PurePath和Path

  • PurePath代表纯路径,不代表真正的路径和文件,纯路径对象操作
  • Path代表真正的路径和文件,可以判断路径或者文件的属性和是否存在
  • Path是PurePath的子类,支持PurePath的各种属性和方法
  • PurePath有两个子类,PureWindowsPath和PurePosixPath,分别代表不同的操作系统的纯路径对象

Windows:

from pathlib import Path,PurePath
cur_path = Path(__file__)
print(cur_path,type(cur_path))


pur_path = PurePath(__file__)
print(pur_path,type(pur_path))

运行结果:

e:\TestProject\iaas\test_data\t_test.py <class 'pathlib.WindowsPath'>
e:\TestProject\iaas\test_data\t_test.py <class 'pathlib.PureWindowsPath'>

Linux:

>>> from pathlib import PurePath
>>> from pathlib import Path
>>> cur_path = Path('/home/env/internet')
>>> print(cur_path,type(cur_path))
/home/env/internet <class 'pathlib.PosixPath'>


>>> pur_path = PurePath('/home/env/internet')
>>> print(pur_path,type(pur_path))
/home/env/internet <class 'pathlib.PurePosixPath'>

总结:使用PurePath就可以实现跨操作系统的路径统一操作。

5、pathlib和os的功能对照

python的lib库文件 python lib文件_设计模式

6、常用的pathlib.Path相关方法

Path.iterdir()  # 遍历目录的子目录或者文件


Path.is_dir()  # 判断是否是目录


Path.glob()  # 过滤目录(返回生成器)


Path.resolve()  # 返回绝对路径


Path.exists()  # 判断路径是否存在


Path.open()  # 打开文件(支持with)


Path.unlink()  # 删除文件或目录(目录非空触发异常)


Path.parts  # 分割路径 类似os.path.split(), 不过返回元组


Path.drive  # 返回驱动器名称


Path.root  # 返回路径的根目录


Path.anchor  # 自动判断返回drive或root


Path.parents  # 返回所有上级目录的列表


Path.with_name()  # 更改路径名称, 更改最后一级路径名


Path.with_suffix()  # 更改路径后缀


Path.joinpath()  # 拼接路径


Path.relative_to()  # 计算相对路径


Path.match()  # 测试路径是否符合pattern


Path.is_dir()  # 是否是文件


Path.is_absolute()  # 是否是绝对路径


Path.is_reserved()  # 是否是预留路径


Path.exists()  # 判断路径是否真实存在


Path.cwd()  # 返回当前目录的路径对象


Path.home()  # 返回当前用户的home路径对象


Path.stat()  # 返回路径信息, 同os.stat()


Path.chmod()  # 更改路径权限, 类似os.chmod()


Path.expanduser()  # 展开~返回完整路径对象


Path.mkdir()  # 创建目录


Path.rename()  # 重命名路径


Path.rglob()  # 递归遍历所有子目录的文件

python的lib库文件 python lib文件_python_02