Python学习:pathlib之Path类 - 路径操作

发布时间:2026/9/12 11:23:58

Python学习:pathlib之Path类 - 路径操作 一、pathlib 模块简介pathlib 是Python 3.4版本开始加入的 路径处理模块。它将路径本身变成一个对象这个对象自带各种操作方法代码写起来更直观、优雅。但 pathlib 不会取代 os.path。os.path 的路径 是字符串‘C:/Users/test.txt)pthlib 的路径是对象Path(’C:/Users/test.txt)根据官方文档pathlib 模块共分为 6个部分PurePath纯路径。拼接路径、取文件名、取后缀、判断路径是否以指定的后缀结尾等。不读取硬盘不能创建、删除文件且不区分操作系统因此运行速度快PurePosixPath、PureWindowsPath:用于处理不同操作系统的斜杠PurePosixPath专门处理 / 斜杠的路径Linux系统的 /home/userPureWindowsPath专门处理 \ 反斜杠的路径Windows系统的 C:\UsersPath实体路径继承 PurePath 的所有能力并增加访问磁盘的功能因此可创建、删除文件夹读取文件内容等。PosixPath、WindowsPath是 Path 在不同操作系统下的具体实现在 Windows 系统中导入 Path那么 Path 即为 WindowsPath同样的在Linux系统中导入 Path 即为 PosixPath我们要学习的便是 Path二、Path 的常用方法1、系统方法1Path.cwd()获取当前所在目录它自动识别了操作系统的类型并在返回值中体现出来。和 os 模块的用法基本差不多2Path.home()获取用户主目录os 模块获取用户主目录可通过 os.environ 获取到环境变量然后根据操作系统的类型通过 os.environ[USERPROFILE] Windows系统、os.environ[HOME] Linux系统来获取。3Path.chdir()Path.chdir() 是 Ppython 3.11版本以后的新特性使用方法(由于我的系统环境问题无法复现p Path(rE:\os_path_2)p.chdir()4Path.expanduser()将路径字符串中的 ~ 替换成当前用户的主目录路径作用和 os.path.expanduser(~)完全一样区别在于 Path.expanduser()返回的是一个 Path 对象。5Path.resolve()将路径解析为绝对路径示例1将相对路径替换成绝对路径在 E:\os_path_2 目录下有一个 test.txt的文件先切换到目录下由于环境问题我使用的是 os.chdir()示例2将路径中的 .. 和 . 消除.. 返回上一级. 当前目录原始路径为E:\os_path_2\test\next_file\test2\test_2.txt得到的结果并不是原始路径而且还不相同那么说明一个情况Path.resolve() 只负责处理不负责判断是否存在。如果需要判断文件路径是否存在则需要使用到 .exists() 来进行判断。再来说一个 .resolve()的参数Path.resolve() 默认参数为 strictFalse可指定为 strictTrue什么作用再来试一下路径不存在时会报错相当于使用 .exists()只不过一个返回的是 False一个直接抛出 FileNotFoundError 错误。6Path.absolute()负责补全路径头不负责清理路径中的 .. 或 .通过上面这个示例可以看出 Path.resolve() 和 Path.asbolute() 的不同.absolute()是将当前所在目录的路径补全在了 p4 的前面没有处理路径中的 ...resolve()将当前所在目录的路径补在了 p4 的前面而且处理了路径中的 ..2、查询与判断Path.exists() 判断路径是否存在Path.is_dir()判断是否为目录Path.is_file()判断是否为普通文件Path.is_symlink()判断是否为符号连接Path.is_absolute()判断是否为绝对路径Path.stat()获取文件状态信息Path.lstat()获取文件状态信息不跟踪符号链接Path.owner()获取文件所有者UnixPath.group()获取文件所属组UnixPath.readlink()读取符号链接的目标路径3、遍历与搜索Path.iterdir()遍历指定目录下的所有内容得到的是一个可迭代的对象如果目录中有子目录不会再遍历子目录Path.glob() 通配符搜索当前目录可查找特定的文件Path.rglob()递归通配符搜索所有子目录查找指定目录下包括子目录中所有指定类型的文件Path.walk()递归遍历目录树Path.walk() 是 Python 3.12以后引入的一个新方法它和 os.walk() 的用法基本一致但返回的是生成器。可通过 for root, dirs, files 来循环。root当前目录的完整绝对路径dirs当前目录下所有子目录files当前目录下所有文件通过示例可以看到 Path.walk() 是逐层遍历的过程4、创建与删除Path.mkdir(mode0o777, parentsTrue, exist_okTrue)创建目录mode0o777 用于设置目录的权限不常用parentsFalse/True是否自动创建路径中所有不存在的父目录当parentsTrue时相当于os.makedirs(exist_okFalse/True如果目标目录已存在是否报错Path.touch(mode0o777, exist_okTrue)创建文件或更新时间戳Path.rmdir()删除空目录Path.unlink(missing_okFalse)删除文件5、文件操作Path.open(moder)打开文件和os模块的一样Path.read_text(encodingNone)读取文本文件Path.write_text(data, encodingNone)写入文本文件覆盖写入Path.read_test() 和 Path.write_text() 只适合操作小文件如果需要操作大文件则需要使用 Path.open()。在使用时务必加上 encoding 参数以免报错。6、重命名与移动Path.rename(target)重命名文件或目录Path.replace(target)重命名并覆盖已存在的目录以上就是 Path 的常用方法我将它们分成了6类基本可以满足日常需求。四、一个示例os模块学习过程中做了一个桌面文件整理的脚本在学习 pathlib 后对其进行了修改。根据文件扩展名对桌面文件进行归类整理。# import os from pathlib import Path import shutil import datetime # 1、定义变量 # 获取当前用户主目录 home Path.home() # 定义source_path 变量赋值为桌面路径 source_path home / Desktop # 定义目标主目录 desc_path home / Desktop / files # 通过字典定义不同的文件类型归类到指定的分类目录suffix_*** 名称可以自定义文件分类也可自定义 suffix_dict { suffix_txt: [.txt], suffix_zip : [.tar.gz, .zip, .rar, .7z, .tar, .gz, .bz2, .xz], suffix_doc : [.doc, .docx], suffix_pdf : [.pdf], suffix_excel : [.xls, .xlsx], suffix_powerpoint : [.ppt, .pptx], suffix_image : [.jpg, .jpeg, .png, .gif, .bmp, .svg, .webp], suffix_video : [.mp4, .avi, .mkv, .wmv, .mov, .flv, .webm], suffix_audio : [.mp3, .wav, .aac, .ogg, .flac], suffix_exe : [.exe, .msi] } def makedirs_file(): # 创建主目录 # .mkdir(parentsTrue, exist_okTrue)中, parentsTrue 表示创建父目录, exist_okTrue 表示如果目录已存在则不创建,不会报错 desc_path.mkdir(parentsTrue, exist_okTrue) # 创建子目录 for key in suffix_dict.keys(): (desc_path / key).mkdir(parentsTrue, exist_okTrue) def get_and_move_file(source_path): # 创建目录 makedirs_file() # 遍历桌面 for file_path in source_path.iterdir(): # 如果脚本在 Desktop 下则跳过即不移动脚本文件 if file_path.name Path(__file__).name: continue # 只处理文件不处理文件夹 if not file_path.is_file(): continue # 获取文件名和扩展名 name_without_ext file_path.stem ext file_path.suffix # 查找属于哪个分类 target_key None for key, suffix_list in suffix_dict.items(): if ext in suffix_list: target_key key break # 如果找不到匹配则跳过 if target_key is None: print(f{file_path.name} 无法识别的文件类型) continue # 定义目标路径 target_folder desc_path / target_key target_path target_folder / file_path.name # 重名处理如果存在重名的文件则以当前系统时间重命名文件 if target_path.exists(): timestamp datetime.datetime.now().strftime(%Y%m%d%H%M%S) new_name f{name_without_ext}_{timestamp}{ext} target_path target_folder / new_name print(f⚠️ {file_path.name} 已存在重命名为 {new_name}) # 移动文件 try: shutil.move(file_path, target_path) print(f✅ 移动 {file_path.name} → {target_folder}) except Exception as e: print(f❌ 移动失败{file_path.name}错误{e}) if __name__ __main__: get_and_move_file(source_path)学习中如有不足还请指正
延伸阅读

更多相关文章

2026/9/9 8:19:32

如何提供有效输入以生成高质量博文

1. 关于无效输入的说明我注意到您提供的输入内容存在以下问题:项目标题为无意义的数字串"111111111111111111"项目正文完全空白关键词和摘要描述均为空值相关热搜词和网络热词也未提供有效信息2. 无法生成有效内容的原因2.1 输入信息严重不足根据您提供的…

2026/9/12 11:20:31

OpenClaw企业级自动化平台架构与RAG集成实战

1. 项目概述:OpenClaw企业级技术栈解析OpenClaw作为新一代企业级自动化平台,正在重塑传统办公流程。这个看似简单的工具名称背后,实际上整合了文档处理引擎、任务调度系统和智能分析模块三大核心技术组件。在企业级部署场景中,它需…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码