当前位置: 首页 > article >正文

python 文件管理库 Path 解析(详细基础)

1 Path库能做什么Path库是python常见的文件操作库以对象形式操作文件路径可以进行以下操作文件路径的拼接example:test / Your_path / files文件地址的提取提取名称、后缀、全程......层级关系访问查询文件是否存在创建目录.............基本上文件操作都够用的实用库2 Path 与 os 库的优势 可选了解文件操作库os的可以查看不了解建议略过from pathlib import Pathimport osdef get_base_name_vs_os(input_file_path:str):获取当前py文件的完整名称、不带后缀名称、后缀:return:fpath_os input_file_pathfpath_path Path(input_file_path)#u can debug this function and try to input- type(fpath_path) in ur IDE-debug window,u can see class pathlib.WindowsPathprint(fos method: {os.path.basename(fpath_os)}, {os.path.basename(os.path.splitext(fpath_os)[0])}, {os.path.splitext(fpath_os)[-1]})print(fPath method: {fpath_path.name}, {fpath_path.stem}, {fpath_path.suffix})returnif __name__ __main__:get_base_name_vs_os(ryour_file_path_like_C:\window)优势Path库相比os库有更全的封装接口能够快速且便携地获取想要的文件地址同样的实现步骤可能需要好几层os操作对象为Object即面向对象可以很方便调用类方法而os需要调用os库相对来说繁琐一些劣势虽然在很多方面完胜os但本质是不可哈希的类型——object类类型在写接口兼容、调用路径时需要注意。其他兼容性问题。3 Path库常用操作3.1 初始化路径想初始化Path对象路径很简单和其他类对象一样只需要Path(your_path)即可获得对应的路径对象。def init_path():input_path Path(ryour_input_path_test.py)#直接通过Path 初始化print(input_path)return input_path除了直接通过单一变量初始化路径还能通过以下示例进行初始化input_path Path(rC:\\,Windows,your_dir) #构造 c盘window/your_dir的文件路径可以传入多个路径返回他们按顺序构造的路径input_path input_path / hello_world.py3.2 获取文件地址文件名称【带后缀、不带后缀】及后缀假设已经获取了文件对象的变量为input_path Path(your_path)文件名称(完整带后缀)用input_path.name即可 ,返回带后缀的文件名称【依旧是Path对象】文件名称(不带后缀)用input_path.stem即可stem有茎的意思假设文件路径像一朵花地上的花就包含了花朵和根茎少了花朵部分根茎也可以被认为是不带后缀花朵的了。文件名称(后缀)用input_path.suffix即可 suffix翻译过来就是后缀返回文件后缀【str】但是这里要注意如果有多个后缀如library.tar.gz, 则会返回最后一个后缀如果想要获取n个后缀请使用suffixes。def get_path_name_stem_suffix(input_path:Path):name input_path.namename_without_suffix input_path.stemsuffix input_path.suffixprint(f\n u get it- name:{name} ; stem: {name_without_suffix} ; suffix:{suffix}\n)return官方示例namePurePosixPath(my/library/setup.py).namePureWindowsPath(//some/share/setup.py).namePureWindowsPath(//some/share).namestemPurePosixPath(my/library.tar.gz).stemPurePosixPath(my/library.tar).stemPurePosixPath(my/library).stemsuffixPurePosixPath(my/library/setup.py).suffixPurePosixPath(my/library.tar.gz).suffixPurePosixPath(my/library).suffix3.3 获取路径状态当我们对路径进行操作时需要判断当前路径所处的位置、是否为文件、是否为文件夹等。假设已经获取了文件对象的变量为input_path Path(your_path)是否存在返回 bool: (True or False)exist input_path.exists()是否是文件夹返回 bool: (True or False)whether_dir input_path.is_dir()是否是文件返回 bool: (True or False)whether_file input_path.is_file()常用状态总def get_path_status(input_path:Path):exist input_path.exists()whether_dir input_path.is_dir()whether_file input_path.is_file()print(f\n file exist status:{exist}, dir :{whether_dir}, file:{whether_file}\n)return3.4 获取当前/父文件夹​ 使用os库时对父文件夹的控制相对较为繁琐而Path对于文件夹层级的管理比较简单。假设我们有一个路径为“C:\Windows\Learning\pycharm\hello_world.py”那他的当前路径为pycharm父路径为Learning,可以使用以下操作获取def get_father_and_local_dir(input_path:Path):local_dir input_path.parentall_father_dir input_path.parents #返回的是 Path.parents类似于可迭代对象如果想要直接看所有结构就list化for father_dir,idx in enumerate(all_father_dir):output f(father_{idx}){father_dir}print(output,end) #迭代参考可以自行debug体会一下print() #纯美化用all_father_dirs list(input_path.parents) # list(Path.parents), u can easily get valuefather_1_dir str(input_path.parents[1]) # get idx1[start in 0 index] parents and str the valueprint(flocal_dir:{local_dir}, father_1_dir:{father_1_dir} ,all_father_dir:{all_father_dirs} \n)PS通常获取当前目录使用.parent就够用了他同样返回当前父文件夹的Path对象获取前n个父级文件夹路径就使用.parents就好但注意他返回的是可迭代对象不能直接使用需要直接使用就套list返回的可迭代对象从0开始也就是说input_path.parents[0]local_dir input_path.parent3.5 路径拼接在上文初始化时我们提及了其中一种路径拼接的方式调用初始化函数input_path Path(rC:\\,Windows,your_dir) #构造 c盘window/your_dir的文件路径可以传入多个路径返回他们按顺序构造的路径input_path input_path / hello_world.py除此之外还有函数方式进行拼接def join_path(input_path:Path,sub_paths(hello,world)):from copy import deepcopyexample_1,example_2 deepcopy(input_path), deepcopy(input_path)for sub_path in sub_paths:example_1 example_1 / sub_path #两种路径拼接方式等价个人建议使用 重载的”/“方便简洁example_2 example_2.joinpath(sub_path)print(f{**50}\nf{example_1}; {example_2}; f\n{**50}\n)3.6 确保文件路径存在创建路径def make_sure_dir_exist(input_path:Path):input_path.mkdir(parentsTrue,exist_okTrue) #相对固定类似于模板父文件夹自动创建True文件夹存在不会重复创建 True使用mkdir这个接口即可一般来说都会使用这样的配置parents: 父文件夹是否需要创建exist_ok: 路径已存在文件夹的情况是否处理Create a new directory at this given path. Ifmodeis given, it is combined with the process’umaskvalue to determine the file mode and access flags. If the path already exists, FileExistsError is raised.Ifparentsis true, any missing parents of this path are created as needed; they are created with the default permissions without takingmodeinto account (mimicking the POSIXmkdir -pcommand).Ifparentsis false (the default), a missing parent raises FileNotFoundError.Ifexist_okis false (the default), FileExistsError is raised if the target directory already exists.Ifexist_okis true, FileExistsError exceptions will be ignored (same behavior as the POSIXmkdir -pcommand), but only if the last path component is not an existing non-directory file.Changed in version 3.5:Theexist_okparameter was added.3.7 计算文件路径间的差异进阶接口介绍def cal_path_diff(path_1:Path, path_2:PathPath.cwd()):计算两个路径间的相对路径差:param path_1: 子集路径【范围更广】:param path_2: 父集路径【范围更小】这种方式仅适用于父集和子集之间无依附关系则会报错try:diff path_1.relative_to(path_2)diff_2 path_2.relative_to(path_1)print(str(diff), \n)# print(str(diff_2),\n) #如果path_2是path_1的父集就会error【反之同理】只能从子集计算父集的差距路径except Exception as e:raise e官方参考 p PurePosixPath(/etc/passwd) p.relative_to(/)PurePosixPath(etc/passwd) p.relative_to(/etc)PurePosixPath(passwd) p.relative_to(/usr)Traceback (most recent call last):File stdin, line 1, in moduleFile pathlib.py, line 694, in relative_to.format(str(self), str(formatted)))ValueError: /etc/passwd is not in the subpath of /usr OR one path is relative and the other absolute3.8 获取当前目录下 指定后缀文件略进阶def find_files(input_path:Path, files_suffix:str.jpg):找文件下的文件通过通配符查找:param input_path: 输入路径:param files_suffix: 匹配的后缀可以自己换一下后缀或者不要后缀换一下路径debug体会一下还能配合列表推导式还算实用但我觉得os.walk对文件遍历好一些specimen_1 input_path.glob(f*{files_suffix}) #不递归进入specimen_2 input_path.glob(f**/*{files_suffix}) #递归进入same to : path.rglob(*.files_suffix)print(fspecimen_1:{list(specimen_1)} \n specimen_2:{list(specimen_2)}\n)真要大面积遍历文件的话我建议用os.walk会好一些【参考 chapter2】4.参考文档official_path_doc最常使用的基本上是上面这些了还有什么需要的再查再找就好了基础解析到这里应该够用了bey~感谢你看到这里希望这篇文章能给你带来一些帮助喜欢的话帮我点个赞吧。5.codeMain_testfrom pathlib import Pathdef init_path():# input_path Path(rE:\Learning\test.py)input_path Path(rE:\\,rLearning,os_vs_path.py)print(input_path)return input_pathdef get_path_name_stem_suffix(input_path:Path):name input_path.namename_without_suffix input_path.stemsuffix input_path.suffixprint(fu get it- name:{name} ; stem: {name_without_suffix} ; suffix:{suffix}\n)returndef get_path_status(input_path:Path):exist input_path.exists()whether_dir input_path.is_dir()whether_file input_path.is_file()print(ffile exist status:{exist}, dir :{whether_dir}, file:{whether_file}\n)returndef get_father_and_local_dir(input_path:Path):local_dir input_path.parentall_father_dir input_path.parents #返回的是 Path.parents类似于迭代器如果想要直接看所有结构就list化for father_dir,idx in enumerate(all_father_dir):output f(father_{idx}){father_dir}print(output,end) #迭代参考可以自行debug体会一下print() #纯美化用all_father_dirs list(input_path.parents) # list(Path.parents), u can easily get valuefather_1_dir str(input_path.parents[1]) # get idx1[start in 0 index] parents and str the valueprint(flocal_dir:{local_dir}, father_1_dir:{father_1_dir} ,all_father_dir:{all_father_dirs} \n)def join_path(input_path:Path,sub_paths(hello,world)):from copy import deepcopyexample_1,example_2 deepcopy(input_path), deepcopy(input_path)for sub_path in sub_paths:example_1 example_1 / sub_path #两种路径拼接方式等价个人建议使用 重载的”/“方便简洁example_2 example_2.joinpath(sub_path)print(f{**50}\nf{example_1}; {example_2}; f\n{**50}\n)def make_sure_dir_exist(input_path:Path):input_path.mkdir(parentsTrue,exist_okTrue) #相对固定类似于模板父文件夹自动创建True文件夹存在不会重复创建 Truedef cal_path_diff(path_1:Path, path_2:PathPath.cwd()):计算两个路径间的相对路径差:param path_1: 子集路径【范围更广】:param path_2: 父集路径【范围更小】这种方式仅适用于父集和子集之间无依附关系则会报错try:diff path_1.relative_to(path_2)diff_2 path_2.relative_to(path_1)print(str(diff), \n)# print(str(diff_2),\n) #如果path_2是path_1的父集就会error【反之同理】只能从子集计算父集的差距路径except Exception as e:raise edef find_files(input_path:Path, files_suffix:str.jpg):找文件下的文件通过通配符查找:param input_path: 输入路径:param files_suffix: 匹配的后缀可以自己换一下后缀或者不要后缀换一下路径debug体会一下specimen_1 input_path.glob(f*{files_suffix}) #不递归进入specimen_2 input_path.glob(f**/*{files_suffix}) #递归进入same to : path.rglob(*.files_suffix)print(fspecimen_1:{list(specimen_1)} \n specimen_2:{list(specimen_2)}\n)if __name__ __main__:t_path init_path()get_path_name_stem_suffix(t_path)get_path_status(input_patht_path)get_father_and_local_dir(t_path)join_path(t_path)find_files(t_path)cal_path_diff(t_path,Path(C:\\Windows)) #记得删掉后面路径再试一次就不会报错了Os Vs Path:from pathlib import Pathimport osdef get_base_name_vs_os(input_file_path:str):获取当前py文件的完整名称、不带后缀名称、后缀:return:fpath_os input_file_pathfpath_path Path(input_file_path)#u can debug this function and try to input- type(fpath_path) in ur IDE-debug window,u can see class pathlib.WindowsPathprint(fos method: {os.path.basename(fpath_os)}, {os.path.basename(os.path.splitext(fpath_os)[0])}, {os.path.splitext(fpath_os)[-1]})print(fPath method: {fpath_path.name}, {fpath_path.stem}, {fpath_path.suffix})returnif __name__ __main__:get_base_name_vs_os(rE:\Learning\os_vs_path.py)

相关文章:

python 文件管理库 Path 解析(详细基础)

1 Path库能做什么: Path库是python常见的文件操作库(以对象形式操作文件路径),可以进行以下操作: 文件路径的拼接(example: test / Your_path / files ) 文件地址的提取(提取名称、…...

解放你的文件夹:智能文件整理Agent,让杂乱文件一键归位

核心功能:不止是“按类型分类”市面上很多文件整理工具只能简单按后缀名归类,但实际使用中我们的需求远不止于此——比如按项目维度、按时间前缀、按业务场景整理,甚至要区分大文件/近期文件避免误操作。这款工具的核心亮点在于:1…...

FontForge完整指南:免费开源字体设计工具的终极解决方案

FontForge完整指南:免费开源字体设计工具的终极解决方案 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 寻找一款功能全面且完全免费的字体设计工具&…...

ai辅助开发新体验:在快马平台生成复杂算法代码,赋能idea社区版项目

今天想和大家分享一个特别实用的开发体验:如何用AI辅助快速生成复杂算法代码,再无缝导入IDEA社区版进行调试优化。整个过程就像有个编程助手在身边,效率提升非常明显。 需求背景 最近在做一个需要动态计算数学表达式的项目,要求…...

抖音无水印批量下载工具:高效内容采集解决方案

抖音无水印批量下载工具:高效内容采集解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

别再东拼西凑了!保姆级教程:用Anaconda在Windows上搞定PaddleOCR CPU版(附shapely安装避坑指南)

从零到一:Windows下Anaconda环境配置PaddleOCR全攻略 在文字识别技术领域,PaddleOCR以其出色的性能和易用性赢得了众多开发者的青睐。但对于初学者而言,从环境配置到成功运行往往充满挑战——版本冲突、依赖缺失、环境变量配置等问题层出不穷…...

效率倍增:用快马生成openclaw一键式部署与配置工具

效率倍增:用快马生成openclaw一键式部署与配置工具 最近在团队协作时遇到了一个头疼的问题:每次新成员加入或者更换开发机,都需要手动部署openclaw环境。这个过程中不仅需要重复下载、解压、配置,还经常因为网络代理、权限等问题…...

5分钟终极指南:如何让加密音乐文件重获自由

5分钟终极指南:如何让加密音乐文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcode…...

从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体

1. 什么是WorkFlow 之前咱们的用法是一种QueryEngine的用法,就是将大模型当成一个查询的工具在使用,而workflow是LlmaIndex的新一代编排引擎。 1.1 核心逻辑 LlamaIndex的workflow,本质上是一个事件驱动(Event-driven&#xff…...

5分钟掌握gInk:Windows上最简单高效的免费屏幕标注工具完整指南

5分钟掌握gInk:Windows上最简单高效的免费屏幕标注工具完整指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否曾在演示时想要快速圈出重点数据&…...

OpenClaw与Python:构建高效自动化脚本,赋能复杂工作场景落地

OpenClaw与Python:构建高效自动化脚本,赋能复杂工作场景落地摘要在数字化转型浪潮席卷全球的今天,自动化技术已成为提升企业运营效率、降低人力成本、应对复杂业务挑战的关键利器。其中,机器人流程自动化(RPA&#xff…...

费城“敬畏部”:AI 与艺术融合的新奇沉浸式体验

【导语:费城全新沉浸式艺术体验项目“敬畏部”,由多位艺术家打造,融合了 AI 技术。它以独特的方式让游客与艺术互动,探讨了个人数据存储等主题,为 AI 在艺术领域的应用提供了新视角。】“敬畏部”:费城的新…...

【5大突破】WarcraftHelper:让经典RTS重获新生的跨系统优化方案

【5大突破】WarcraftHelper:让经典RTS重获新生的跨系统优化方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper作为开源解…...

(转发需官方授权)生活中遇到的知识:(转发需官方授权)有些饭店办公的人多所以有个办公地的营业执照也会有一个饭店的营业执照这种情况起码这个主打饭店运营的办公地的公司有起码有两个子饭店其中一个是主饭店。

(转发需官方授权)生活中遇到的知识:(转发需官方授权)有些饭店办公的人多所以有个办公地的营业执照也会有一个饭店的营业执照这种情况起码这个主打饭店运营的办公地的公司有起码有两个子饭店其中一个是主饭店。...

互联网时代出现过的电脑病毒之“小球病毒”也叫“乒乓病毒”的电脑和安卓手机上出现过的病毒“乒乓病毒”简介

(转发需官方授权) 互联网时代出现过的电脑病毒之“小球病毒”也叫“乒乓病毒”的电脑和安卓手机上出现过的病毒“乒乓病毒”简介 1989年4月,西南铝厂一台正在工作的计算机屏幕上突然跳出一个小方块。 ​​​1989年4月,西南铝厂一…...

BiliTools:2026年最强大的免费哔哩哔哩资源管理工具终极指南

BiliTools:2026年最强大的免费哔哩哔哩资源管理工具终极指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。...

教师必备:用CosyVoice快速制作带语音讲解的理工科课件

教师必备:用CosyVoice快速制作带语音讲解的理工科课件 作为一名理工科教师,你是否曾为制作多媒体课件而烦恼?尤其是那些布满复杂公式的数学、物理、工程学课件,想要为每个公式配上专业的语音讲解,却面临两大难题&…...

VoxCPM-1.5-WEBUI作品集:高音质语音合成效果大赏

VoxCPM-1.5-WEBUI作品集:高音质语音合成效果大赏 1. 开篇:声音的艺术与技术 在数字内容创作领域,声音质量往往决定了作品的沉浸感和专业度。想象一下,当你听到一段清晰自然、富有情感的语音时,是否会不自觉地被吸引&…...

MogFace-large部署案例:嵌入式AI盒子(Jetson Orin)上轻量运行方案

MogFace-large部署案例:嵌入式AI盒子(Jetson Orin)上轻量运行方案 1. 项目背景与价值 人脸检测技术在实际应用中面临着一个关键挑战:如何在资源受限的嵌入式设备上实现高精度实时检测。传统方案往往需要在精度和速度之间做出妥协…...

AI辅助开发:利用快马多模型AI为9·1免费素材网站添加智能搜索与推荐

AI辅助开发:利用快马多模型AI为91免费素材网站添加智能搜索与推荐 最近在做一个免费素材网站的项目,需要为91免费素材平台添加智能搜索和推荐功能。传统的关键词搜索已经不能满足用户需求了,特别是对于设计素材这种视觉化内容。正好发现了In…...

不平衡电网电压下虚拟同步发电机VSG并网运行及多目标控制策略研究

不平衡电网电压下虚拟同步发电机VSG并网运行(三相电流平衡、有功功率恒定、无功功率恒定三种控制目标皆可实现),下图只现实了不平衡电压下控制三相电流平衡,送相关文档 不平衡电网电压绝对是VSG并网的噩梦,本来好好的…...

如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南

如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

WeChatExporter:让微信聊天记录导出实现数据自主权的开源方案

WeChatExporter:让微信聊天记录导出实现数据自主权的开源方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录已成为个人…...

磁流变半主动悬架Simulink模型构建与策略设计概述

磁流变半主动悬架simulink模型,包含模型创建,模型策略设计磁流变悬架的Simulink建模就像搭积木——你得先搞清楚每块积木该放哪儿。咱们从最基础的四分之一车模型开始,车身质量、悬架刚度这些参数直接在Simulink里拖几个Mass和Spring模块就能…...

AI教材写作神器登场,低查重表现出色,助力教材快速产出!

在编写教材的过程中,如何满足多样化的需求成为了一个重要的挑战。不同年龄段的学生有着显著的认知差异,如果教材内容过于深奥或浅显都可能出现问题。同时,随着课堂教学和自主学习等不同情境的出现,教材的呈现方式同样需要灵活调整…...

5大核心突破:WarcraftHelper让魔兽争霸III重获新生

5大核心突破:WarcraftHelper让魔兽争霸III重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否也曾遇到这些困扰:宽…...

MyKeymap应用专属键盘映射配置指南

MyKeymap应用专属键盘映射配置指南 【免费下载链接】MyKeymap 一款基于 AutoHotkey 的键盘映射工具 项目地址: https://gitcode.com/gh_mirrors/my/MyKeymap 还在为不同软件快捷键冲突烦恼?当你在Photoshop中习惯使用CtrlS保存,却在Excel中误触导…...

5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南

5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 在数字设计的协作流程中…...

NFL十年追踪数据与机器学习创新

某机构十年NFL下一代数据统计创新 每场NFL比赛都会产生数百万个来自22名佩戴RFID设备的球员的追踪数据点。75个机器学习模型在云端处理这些数据,耗时不到一秒,将橄榄球运动转变为每一次移动都被测量、建模并即时分析的运动。 最初,每支俱乐部…...