前言

之前曾介绍过Python的os库详细使用方式,具体可看看这篇博文:https://www.cnblogs.com/poloyy/p/12341231.html

博主在学完os库之后,就开始投入使用了,在项目中我们一般需要让 路径可配置 ,什么意思?假设你现在有个项目A,里面有些变量存储了文件路径,如: project_path = C:\Users\user\Desktop\py\moocInterface ;想象下,当你换了个电脑,你的项目不在放在C盘下的时候,你这个变量是不是就失效了,此时你就要手动改路径,改来改去....维护成本极高;所以博主后面就用了os库去完成路径可配置,具体代码如下,大家完全可以复用的哈

首先,我的项目目录结构是这样的

  1. BaseSettings 文件存放的就是项目通用的常量,譬如项目路径 project_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
  2. 当我想获取 config 文件夹下的 config.ini 时,我的变量就是 configIni_path = os.path.join(project_path, "config", "config.ini") ,以此类推~
  3. 可以看到,其实还是蛮长一行代码的,并且需要由内而外的阅读代码;
  4. 无独有偶,接触到了 pathlib 库之后,发现原来它有这么好用,并且可以完全替代 os.path

pathlib 的简单介绍

  • 官方定义:Object-oriented filesystem paths(面向对象的文件系统路径)
  • 官方推荐:pathlib是一个从3版本开始就能完全替代os.path的内置库,在python官网中这样说 "对于字符串的低级路径操作,您也可以使用该 os.path模块"

pathlib和os.path的比较

  1. 当需要找多个层级的目录路径时,通过 os.path 需要嵌套写法,如我上面的 project_path ,而 pathlib 可以提供链式写法,简洁明了
  2. os.path 只用于处理路径,如果你想在获取到的路径下做一些事情(如:创建一个目录),你就需要用 os 模块,而 pathlib 可以一站式搞定,将在后面展开讲

从这开始,我们通过os.path和pathlib的比较他们的代码量和实现方式

获取当前文件路径

os模块获取当前文件路径

  1. import os
  2.  
  3. v2 = os.getcwd()
  4.  
  5. # 输出 F:\moocInterface

pathlib 获取当前文件路径

  1. from pathlib import Path
  2.  
  3. v = Path.cwd()
  4.  
  5. # 输出 F:\moocInterafce

获取上层、上上层目录

os 获取上上层目录

  1. import os
  2.  
  3. print(os.path.dirname(os.path.dirname(os.getcwd()))) # F:\

很明显用os的写法就是嵌套式调用

pathlib 获取上上层目录

  1. from pathlib import Path
  2.  
  3. print(Path.cwd().parent.parent) # F:\

而用pathlib就是链式调用

拼接目录

场景:在当前目录的父级目录拼接 test 文件夹下的 test.txt

os 拼接目录

  1. import os
  2.  
  3. os.path.join(os.path.dirname(os.getcwd()),"test","test.txt")

pathlib 拼接目录

  1. from pathlib import Path
  2.  
  3. paths = ["test","test.txt"]
  4. Path.cwd().parent.joinpath(*paths)

创建文件夹并重命名

os模块

  1. import os
  2. import os.path
  3.  
  4. # 创建 peoject/test目录
  5. os.makedirs(os.path.join('project', 'test'), exist_ok=True)
  6.  
  7. # 将test.txt 重命名为 project/tests.txt
  8. os.rename('test.txt', os.path.join('project', 'tests.txt'))

pathlib模块的Path对象

  1. from pathlib import Path
  2.  
  3. # 创建 project/test目录
  4. Path('project/test').mkdir(parents=True, exist_ok=True)
  5.  
  6. # 将test.txt 重命名为 project/tests.txt
  7. Path('test.txt').rename('project/test.txt')

os和pathlib的对应关系

pathlib的常用基本方法

  1. Path.parents  # 返回所有上级目录的列表
  2.  
  3. Path.parts  # 分割路径 类似os.path.split(), 不过返回元组
  4.  
  5. Path.root  # 返回路径的根目录

pathlib的常用基本方法

  1. Path.is_dir()  # 判断是否是目录
  2.  
  3. Path.is_dir()  # 是否是文件
  4.  
  5. Path.exists()  # 判断路径是否存在
  6.  
  7. Path.open()  # 打开文件(支持with)
  8.  
  9. Path.resolve()  # 返回绝对路径
  10.  
  11. Path.cwd()  # 返回当前目录
  12.  
  13. Path.iterdir()  # 遍历目录的子目录或者文件
  14.  
  15. Path.mkdir()  # 创建目录
  16.  
  17. Path.rename()  # 重命名路径
  18.  
  19. Path.unlink()  # 删除文件或目录(目录非空触发异常)
  20.  
  21. Path.joinpath()  # 拼接路径

Python - 超好用的第三方库pathlib,快速获取项目中各种路径的更多相关文章

  1. cocoapods 删除已导入项目的第三方库和移除项目中的cocoapods

    第一部分将介绍如何删除项目中已经由cocoapods配置好的第三方 1.打开项目中的Podfile文件 2.删除选中的pod Snapkit的命令行3.打开终端cd到当前项目的根目录下重新执行pod ...

  2. Python升级已经安装的第三方库

    Python升级已经安装的第三方库 主要两步操作,查看需要升级库,升级库.如下: pip list # 列出安装的库 pip list --outdated # 列出有更新的库 pip install ...

  3. prop-types:该第三方库对组件的props中的变量进行类型检测

    利用prop-types第三方库对组件的props中的变量进行类型检测

  4. Python在Windows下安装第三方库浅谈

    在用python编写代码时,往往需要用到第三方库,那么python如何去用第三方库呢,首先我们先来看看是如何安装的,方法可能会很多,但这边只介绍一种,其它请百度或google 比如asyncio,这里 ...

  5. python --- 协程编程(第三方库gevent的使用)

    1. 什么是协程? 协程(coroutine),又称微线程.协程不是线程也不是进程,它的上下文关系切换不是由CPU控制,一个协程由当前任务切换到其他任务由当前任务来控制.一个线程可以包含多个协程,对于 ...

  6. Python入门:如何使用第三方库?

    这是关于Python的第13篇文章,也是关于<编程小白的第1本Python入门书>内容的最后一篇,主要介绍下如何使用第三方库. 1. 第三方库 Python相当于一个手机,第三方库相当于手 ...

  7. Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils、openpyxl)

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  8. 【react】利用prop-types第三方库对组件的props中的变量进行类型检测

    1.引言--JavaScript就是一个熊孩子   1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...

  9. Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

随机推荐

  1. Codeforces Round #599 (Div. 2)D 边很多的只有0和1的MST

    题:https://codeforces.com/contest/1243/problem/D 分析:找全部可以用边权为0的点连起来的全部块 然后这些块之间相连肯定得通过边权为1的边进行连接 所以答案 ...

  2. file_get_contents为何无法采集某些压缩过的网站

    有些网站直接用file_get_contents就能采集, 但是有些不行. 于是可以在网址前加入 'compress.zlib://‘ $url = 'compress.zlib://' . 'htt ...

  3. [LC] 127. Word Ladder

    Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest t ...

  4. 103)PHP,递归读取目录内容

    知识点总结: 打开某个目录 依次读取目录内文件 如果某个文件为目录 递归对该目录采用打开,读取,若还是目录,继续判断,读取 递归点: 如果子文件为目录,则递归 出口: 如果目录中不存在子目录,则不需要 ...

  5. 学习python-20191107

    一.导入模块的两种方式 方式1:import 包名.模块名 [ as 别名]方式2:from 包名 import 模块名            from 包名.模块名 import 变量|函数|类 # ...

  6. Longest Increasing Subsequence (Medium)

    第一次做题思路201511092250 1.采用map存储,key为nums[i],value为以nums[i]为结尾的最大递增子序列的长度 2.采用map里面的lower_bounder函数直接找出 ...

  7. VSAN磁盘扩容与收缩(二)

  8. 16)用了session会话技术

    为什么用session会话技术? 因为假如你进入后台,不可能随意进入,即使你的验证通过了,那么还需要一个变量来存一个标志,假如标志的值是yes,那么我们可以直接进入后台的首页,无需验证,但是,标志是n ...

  9. SPA(单页面web应用)和MPA(多页面web应用)的区别

    转:https://blog.csdn.net/amaniz/article/details/79203562 vue多页面应用开发请参见: https://github.com/amunamuna/ ...

  10. Nginx笔记总结十三:sub_filter内容替换

    Nginx变异安装加上参数 --with-http_sub_module 配置文件: location ~* ^/portalproxy/([-]*)/portal(.*)$ { #sub_filte ...