Pythin - pathlib

简介

跨平台,python 内置

  • PurePath:处理路径字符串
  • Path: 处理文件系统的真实路径

获取目录

# 将当前文件构建为Path对象
path_obj = Path(__file__)
print(f'path_obj => {path_obj}, type => {type(path_obj)}')
# out:path_obj => E:\PyProject\studentManage\test\test_pathlib.py, type => <class 'pathlib.WindowsPath'>

# 获取绝对路径, 推荐使用resolve,会做一些路径标准化的操作
resolve = path_obj.resolve()
absolute = path_obj.absolute()
print(f'resolve => {resolve},type => {type(resolve)}')
# resolve => E:\PyProject\studentManage\test\test_pathlib.py,type => <class 'pathlib.WindowsPath'>
print(f'absolute => {absolute}, type => {type(absolute)}')
# absolute => E:\PyProject\studentManage\test\test_pathlib.py, type => <class 'pathlib.WindowsPath'>


 # 获得上一层的文件对象
parent_obj = resolve.parent 
print(f'parent_obj => {parent_obj}, type => {type(path_obj)}')
# parent_obj => E:\PyProject\studentManage\test, type => <class 'pathlib.WindowsPath'>

 # 获得上一层的路径的文件名称
name_obj = parent_obj.name 
print(f'name_obj => {name_obj}, type => {type(name_obj)}')
# name_obj => test, type => <class 'str'>

print(parent_obj.parts)  # out: ('E:\\', 'PyProject', 'studentManage', 'test')
print(parent_obj.anchor)  # 返回根路径 out: E:\

# 获得用户家目录
print(Path.home()) # C:\Users\86158

# 获得当前所在目录
print(Path.cwd()) # E:\PyProject\studentManage\test

# 获得文件名称
print(path_obj.stem,type(path_obj.stem)) # test_pathlib <class 'str'>
# 获得文件后缀
print(path_obj.suffix, type(path_obj.suffix)) # .py <class 'str'>

路径拼接

print(Path(Path.home(),'Desktop'))  # C:\Users\86158\Desktop

print(Path.home().joinpath('Desktop'))# C:\Users\86158\Desktop


# pathlib 重写了 / 运算符,这样写出的代码十分优雅
path_final = Path(__file__).resolve().parent /  'static'
print(path_final, type(path_final))  # out: E:\PyProject\studentManage\test\static <class 'pathlib.WindowsPath'>

路径判断

path_str = r'D:\k8s\golang-main\go-zero学习'
p = Path(path_str)
print(p.exists()) # False
print(p.is_dir()) # True
print(p.is_file()) # False

删除文件夹和文件


# exit_ok = false: 默认值,如果存在删除会终止并提示
Path.mkdir(Path(r'E:\a'), exist_ok=False)

# 删除文件夹,如果文件夹不为空杀手拿出失败
Path.rmdir(Path(r'E:\a'))

# 删除文件 , missing_ok=False 默认值, 如果文件不存在报错
Path.unlink(Path(r'E:\a.txt\a.txt'),missing_ok=False)

文件迭代查找


#  1. iterdir(): 返回一个生成器对象 ,返回路径下所有的目录,不包含子目录
path_str = r'D:\k8s\golang-main\go-zero学习'

p = Path(path_str)

for child in p.iterdir():  # 
    print(child,type(child))

# out:
'''
D:\k8s\golang-main\go-zero学习\1_go-zero架构设计 <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\go-zero学习\2_go-zero介绍 <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\go-zero学习\3_go-zero适用场景 <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\go-zero学习\4_使用goctl快速创建项目 <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\go-zero学习\5_使用goctl创建微服务项目 <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\go-zero学习\code <class 'pathlib.WindowsPath'>

'''


# 2.glob() :寻找匹配的对象,返回生成器对象

path_str = r'D:\k8s\golang-main'
p = Path(path_str)

# **/*.md :前两个** 表示递归包含子目录
# *.md : 只匹配当前目录

for file in p.glob('**/*.md'):  
    print(file, type(file))

# 部分输出:
'''
D:\k8s\golang-main\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\Docker详细教程\Docker基础详细笔记\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\Docker详细教程\Docker高级详细笔记\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\etcd详细教程\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\Gin框架\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\Gin框架\1_Gin内容介绍\README.md <class 'pathlib.WindowsPath'>
D:\k8s\golang-main\Gin框架\2_http及Template介绍\README.md <class 'pathlib.WindowsPath'>
'''




# 2.1 匹配多种类型的文件
patterns = ['md', 'DS_Store']

for patt in patterns:
    for file in p.glob(f'**/*.{patt}'):
        print(file, type(file))

1.官网文档:https://pathlib.readthedocs.io/en/pep428/#
2.参考:https://www.jb51.net/article/193402.htm
3.参考:https://zhuanlan.zhihu.com/p/475661402

posted @   chuangzhou  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示