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
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/16882802.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!