Python - 超好用的第三方库pathlib,快速获取项目中各种路径
前言
之前曾介绍过Python的os库详细使用方式,具体可看看这篇博文:https://www.cnblogs.com/poloyy/p/12341231.html
博主在学完os库之后,就开始投入使用了,在项目中我们一般需要让 路径可配置 ,什么意思?假设你现在有个项目A,里面有些变量存储了文件路径,如: project_path = C:\Users\user\Desktop\py\moocInterface ;想象下,当你换了个电脑,你的项目不在放在C盘下的时候,你这个变量是不是就失效了,此时你就要手动改路径,改来改去....维护成本极高;所以博主后面就用了os库去完成路径可配置,具体代码如下,大家完全可以复用的哈
首先,我的项目目录结构是这样的

- BaseSettings 文件存放的就是项目通用的常量,譬如项目路径 project_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
- 当我想获取 config 文件夹下的 config.ini 时,我的变量就是 configIni_path = os.path.join(project_path, "config", "config.ini") ,以此类推~
- 可以看到,其实还是蛮长一行代码的,并且需要由内而外的阅读代码;
- 无独有偶,接触到了 pathlib 库之后,发现原来它有这么好用,并且可以完全替代 os.path
pathlib 的简单介绍
- 官方定义:Object-oriented filesystem paths(面向对象的文件系统路径)
- 官方推荐:pathlib是一个从3版本开始就能完全替代os.path的内置库,在python官网中这样说 "对于字符串的低级路径操作,您也可以使用该 os.path模块"
pathlib和os.path的比较
- 当需要找多个层级的目录路径时,通过 os.path 需要嵌套写法,如我上面的 project_path ,而 pathlib 可以提供链式写法,简洁明了
- os.path 只用于处理路径,如果你想在获取到的路径下做一些事情(如:创建一个目录),你就需要用 os 模块,而 pathlib 可以一站式搞定,将在后面展开讲
从这开始,我们通过os.path和pathlib的比较他们的代码量和实现方式
获取当前文件路径
os模块获取当前文件路径
import os v2 = os.getcwd() # 输出 F:\moocInterface
pathlib 获取当前文件路径
from pathlib import Path v = Path.cwd() # 输出 F:\moocInterafce
获取上层、上上层目录
os 获取上上层目录
import os print(os.path.dirname(os.path.dirname(os.getcwd()))) # F:\
很明显用os的写法就是嵌套式调用
pathlib 获取上上层目录
from pathlib import Path print(Path.cwd().parent.parent) # F:\
而用pathlib就是链式调用
拼接目录
场景:在当前目录的父级目录拼接 test 文件夹下的 test.txt
os 拼接目录
import os os.path.join(os.path.dirname(os.getcwd()),"test","test.txt")
pathlib 拼接目录
from pathlib import Path paths = ["test","test.txt"]
Path.cwd().parent.joinpath(*paths)
创建文件夹并重命名
os模块
import os
import os.path # 创建 peoject/test目录
os.makedirs(os.path.join('project', 'test'), exist_ok=True) # 将test.txt 重命名为 project/tests.txt
os.rename('test.txt', os.path.join('project', 'tests.txt'))
pathlib模块的Path对象
from pathlib import Path # 创建 project/test目录
Path('project/test').mkdir(parents=True, exist_ok=True) # 将test.txt 重命名为 project/tests.txt
Path('test.txt').rename('project/test.txt')
os和pathlib的对应关系

pathlib的常用基本方法
Path.parents # 返回所有上级目录的列表 Path.parts # 分割路径 类似os.path.split(), 不过返回元组 Path.root # 返回路径的根目录
pathlib的常用基本方法
Path.is_dir() # 判断是否是目录 Path.is_dir() # 是否是文件 Path.exists() # 判断路径是否存在 Path.open() # 打开文件(支持with) Path.resolve() # 返回绝对路径 Path.cwd() # 返回当前目录 Path.iterdir() # 遍历目录的子目录或者文件 Path.mkdir() # 创建目录 Path.rename() # 重命名路径 Path.unlink() # 删除文件或目录(目录非空触发异常) Path.joinpath() # 拼接路径
Python - 超好用的第三方库pathlib,快速获取项目中各种路径的更多相关文章
- cocoapods 删除已导入项目的第三方库和移除项目中的cocoapods
第一部分将介绍如何删除项目中已经由cocoapods配置好的第三方 1.打开项目中的Podfile文件 2.删除选中的pod Snapkit的命令行3.打开终端cd到当前项目的根目录下重新执行pod ...
- Python升级已经安装的第三方库
Python升级已经安装的第三方库 主要两步操作,查看需要升级库,升级库.如下: pip list # 列出安装的库 pip list --outdated # 列出有更新的库 pip install ...
- prop-types:该第三方库对组件的props中的变量进行类型检测
利用prop-types第三方库对组件的props中的变量进行类型检测
- Python在Windows下安装第三方库浅谈
在用python编写代码时,往往需要用到第三方库,那么python如何去用第三方库呢,首先我们先来看看是如何安装的,方法可能会很多,但这边只介绍一种,其它请百度或google 比如asyncio,这里 ...
- python --- 协程编程(第三方库gevent的使用)
1. 什么是协程? 协程(coroutine),又称微线程.协程不是线程也不是进程,它的上下文关系切换不是由CPU控制,一个协程由当前任务切换到其他任务由当前任务来控制.一个线程可以包含多个协程,对于 ...
- Python入门:如何使用第三方库?
这是关于Python的第13篇文章,也是关于<编程小白的第1本Python入门书>内容的最后一篇,主要介绍下如何使用第三方库. 1. 第三方库 Python相当于一个手机,第三方库相当于手 ...
- Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils、openpyxl)
数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...
- 【react】利用prop-types第三方库对组件的props中的变量进行类型检测
1.引言--JavaScript就是一个熊孩子 1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
随机推荐
- CSS样式表-------第二章:选择器
二 .选择器 内嵌.外部样式表的一般语法: 选择器 { 样式=值: 样式=值: 样式=值: ...... } 以下面html为例,了解区分一下各种样式的选择器 <head> <met ...
- day24-练习
#17.有四个数字:1 2 3 4 ,能组成多少个各不相同且数字不重复的三位数?各是多少? count = 0 for i in range(1,5): for j in range(1,5): fo ...
- Java多线程处理任务(摘抄)
很多时候,我们需要对一个庞大的队列或者二维数组进行处理.这些处理可能是循环的,比如给一个excel多个sheet的联系人列表发邮件.很幼稚的方法就是用一个或者两个FOR循环搞定,对于庞大的数据有得让你 ...
- Windows下 webstorm安装tomcat配置svn并使用
先附上所需要的软件的下载地址:https://pan.baidu.com/s/1c2ripd2 1.下载并安装jdk以及配置jdk的环境变量 1)下载jdk,选择安装目录安装,我选择的是默认路径,安装 ...
- hibernate反向工程
- [LC] 124. Binary Tree Maximum Path Sum
Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any ...
- python掉包侠与深浅拷贝
今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...
- considerate|considerable|content|Contact|Consult|deceived|
ADJ-GRADED 替人着想的;体贴的Someone who is considerate pays attention to the needs, wishes, or feelings of o ...
- 吴裕雄--天生自然 R语言开发学习:回归(续二)
#------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...
- 三年无限流量免费随身WiFi充电宝是真的还是套路?
一般来说大家现在看到"无限流量"."免费"等字眼,总会有一种"这是陷阱"."这是大坑"."就要黑你钱" ...