返回顶部
首页 > 资讯 > 后端开发 > Python >python3利用pathlib替代os.path的方法实例
  • 843
分享到

python3利用pathlib替代os.path的方法实例

2024-04-02 19:04:59 843人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言pathlib 库pathlib 获取文件路径Path.cwd 获取当前文件夹路径获取当前文件路径获取 Path 对象绝对路径一些常用的获取文件属性获取上层,上上层目录获取用

前言

如果你还在为操作文件路径烦恼,不会使用os.path模块,那么是时候试试pathlib了。

pathlib 库

pathlib 库从 python3.4 开始,到 python3.6 已经比较成熟。如果你的新项目可以直接用 3.6 以上,建议用 pathlib。相比于老式的 os.path 有几个优势:

  • 老的路径操作函数管理比较混乱,有的是导入 os, 有的又是在 os.path 当中,而新的用法统一可以用 pathlib 管理。
  • 老用法在处理不同操作系统 win,Mac 以及 linux 之间很吃力。换了操作系统常常要改代码,还经常需要进行一些额外操作。
  • 老用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。
  • pathlib 简化了很多操作,用起来更轻松。

常用的 pathlib 和 os 对比图

操作os and os.pathpathlib
绝对路径os.path.abspathPath.resolve
修改权限os.chmodPath.chmod
创建目录os.mkdirPath.mkdir
重命名os.renamePath.rename
移动os.replacePath.replace
删除目录os.rmdirPath.rmdir
删除文件os.remove, os.unlinkPath.unlink
工作目录os.getcwdPath.cwd
是否存在os.path.existsPath.exists
用户目录os.path.expanduserPath.expanduser and Path.home
是否为目录os.path.isdirPath.is_dir
是否为文件os.path.isfilePath.is_file
是否为连接os.path.islinkPath.is_symlink
文件属性os.statPath.stat, Path.owner, Path.group
是否为绝对路径os.path.isabsPurePath.is_absolute
路径拼接os.path.joinPurePath.joinpath
文件名os.path.basenamePurePath.name
上级目录os.path.dirnamePurePath.parent
同名文件os.path.samefilePath.samefile
后缀os.path.splitextPurePath.suffix

pathlib 获取文件路径

Path.cwd 获取当前文件夹路径

需注意的是,返回的不是字符串,而是 windowsPath 对象

from pathlib import Path

# 1.可以直接调用类方法.cwd()
print(Path.cwd())  # C:\Users\dell\PyCharmProjects\untitled3\demo

# 2.也可以实例化后调用
p = Path('./')
print(p.cwd()) # C:\Users\dell\PycharmProjects\untitled3\demo
print(type(p.cwd()))  # <class 'pathlib.WindowsPath'>

获取当前文件路径

from pathlib import Path

# 当前文件路径
p = Path(__file__)
print(p)

获取 Path 对象绝对路径

from pathlib import Path

# 当前文件路径
p = Path('data.JSON')
print(p)  # data.json 对象
print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\data.json

一些常用的获取文件属性

from pathlib import Path

# 当前文件路径
p = Path(__file__)
print(p.absolute())   # 获取绝对路径
print(p.resolve())    # 获取绝对路径
print(p.name)   # 获取文件名称 'a1117.py'
print(p.stem)    # 只要文件名,不要后缀 a1117
print(p.suffix)  # 获取文件 后缀.py
print(p.suffixes)  # 文件所有的猴子 ['.py']
print(p.parts)  # 拆分('C:\\', 'Users', 'dell', 'PycharmProjects', 'untitled3', 'demo', 'a1117.py')
print(p.parent)  # C:\Users\dell\PycharmProjects\untitled3\demo
print(p.parent.parent)  # C:\Users\dell\PycharmProjects\untitled3
print(p.parents)  # 所有的父级 <WindowsPath.parents>
print(p.anchor)  # 锚,目录前面的部分 C:\ 或者 /

获取上层,上上层目录

from pathlib import Path

# .parent 获取上一层
print(Path.cwd().parent)

# 实例化后调用 .parent
p = Path('./')
print(p.cwd().parent)

获取上上层使用链式方法调用 .parent.parent

from pathlib import Path

# .parent 获取上一层
print(Path.cwd().parent.parent)

# 实例化后调用 .parent
p = Path('./')
print(p.cwd().parent.parent)

获取用户home目录

from pathlib import Path
print(Path.home())  # c:\Users\dell

判断文件,文件夹

is_file()判断是不是文件

from pathlib import Path

# 1.  is_file() 判断是不是文件
print(Path.cwd().is_file())  # False

# 2.也可以实例化后调用
p = Path('./data.json')
print(p.is_file())  # True

is_dir() 判断是否是文件夹

from pathlib import Path

# 1.  is_file() 判断是不是文件
print(Path.cwd().is_dir())  # True

# 2.也可以实例化后调用
p = Path('./data.json')
print(p.is_dir())  # False

exists() 判断文件 或文件夹是否存在

from pathlib import Path

# exists() 判断是否存在
p = Path('./data.json')
print(p.exists())  # True or False

is_absolute() 判断是否是绝对路径

from pathlib import Path

# 当前文件路径
p = Path(__file__)
print(p)
print(p.is_absolute())  # True

joinpath 拼接目录

可以用类似 os.path.join 的方法

from pathlib import Path

# 当前文件路径
p = Path('./')
print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo
print(p.joinpath('data.json'))  # data.json
print(p.joinpath('data.json').absolute())   # C:\Users\dell\PycharmProjects\untitled3\demo\data.json
# 拼接多层
print(p.joinpath('files', 'data.json'))   # files\data.json
print(p.joinpath('files', 'data.json').absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\files\data.json

pathlib 支持用 / 拼接路径, 这种语法估计用的人很少

from pathlib import Path

# 当前文件路径
p = Path('./')
# / 拼接
new_path = p / 'files' / 'data.json'
print(new_path.absolute())

iterdir()遍历文件目录

比如在当前脚本的 files 目录有以下文件夹和子文件

.iterdir() 遍历某个目录下的所有路径(文件和子目录)

from pathlib import Path

# 当前文件路径
p = Path('files')
for i in p.iterdir():
    print(i.absolute())

"""运行结果:
C:\Users\dell\PycharmProjects\untitled3\demo\files\json
C:\Users\dell\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\dell\PycharmProjects\untitled3\demo\files\yaml
"""

如果只需获取文件夹,可以加个判断.is_dir()

from pathlib import Path

# 当前文件路径
p = Path('files')
print([i for i in p.iterdir() if i.is_dir()])  # [WindowsPath('files/json'), WindowsPath('files/yaml')]

也可以用.is_file获取文件对象

from pathlib import Path

# 当前文件路径
p = Path('files')
print([i for i in p.iterdir() if i.is_file()])  # [WindowsPath('files/username.txt')]

glob() 和 rglob() 模式匹配(正则表达式)

使用模式匹配(正则表达式)匹配指定的路径。glob 只会匹配当前目录下, rglob 会递归所有子目录 比如在当前脚本的 files 目录有以下文件夹和子文件

glob 只会匹配当前目录下

from pathlib import Path

p = Path('files')
# glob 只会遍历查找当前目录
print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.glob('*.yml')])  # []

rglob 会递归所有子目录

from pathlib import Path

p = Path('files')
# glob 只会遍历查找当前目录
print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]

match() 检查路径是否符合规则

from pathlib import Path

p = Path('data.json')
# math 检查匹配规则
print(p.match('*.json'))  # True

创建文件操作

touch() 创建文件

from pathlib import Path

p = Path('xx.json')
p.touch()   # 创建一个xx.json

当文件已经存在的时候,p.touch() 也不会报错,因为默认参数 exist_ok=True 如果设置 exist_ok=False, 文件已经存在,touch就会报错了

from pathlib import Path

p = Path('xx.json')
p.touch(exist_ok=False)   # 创建一个xx.json

抛出异常FileExistsError: [Errno 17] File exists: 'xx.json'

mkdir() 创建目录

在当前脚本下创建一个yoyo目录

from pathlib import Path

p = Path('yoyo')
# mkdir 创建yoyo目录
p.mkdir()

如果想一次性创建多层目录 'yoyo/json'

from pathlib import Path

p = Path('yoyo/json')
# mkdir 创建yoyo/json目录
p.mkdir()

此时会抛出异常FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'yoyo\json'

递归创建目录mkdir(parents=True)

from pathlib import Path

p = Path('yoyo/json')
# mkdir 创建yoyo/json目录
p.mkdir(parents=True)

删除文件操作

删除目录非常危险,并且没有提示,一定要谨慎操作

rmdir() 一次只删除一级目录,且当前目录必须为空。

from pathlib import Path

p = Path('yoyo/json')
# mkdir 创建yoyo/json目录
p.rmdir()

unlink() 删除文件

from pathlib import Path

p = Path('files/username.txt')
p.unlink()

文件读写操作

pathlib 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。

  • .read_text() 读取文本
  • .read_bytes() 读取 bytes
  • .write_text() 写入文本
  • .write_bytes() 写入 tytes
from pathlib import Path

p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

file.write 操作使用的是 w 模式,如果之前已经有文件内容,将会被覆盖。

修改文件

replace() 移动文件

from pathlib import Path

p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

p.replace('xx.json')

with_name() 重命名文件

from pathlib import Path

p = Path('hello.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

# 重命名为一个新的文件对象
new_file = p.with_name('x.txt')
print(new_file)
p.replace(new_file)  # 移动到新的位置

总结

到此这篇关于Python3利用pathlib替代os.path的文章就介绍到这了,更多相关python3 pathlib替代os.path内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python3利用pathlib替代os.path的方法实例

本文链接: https://lsjlt.com/news/117383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python3利用pathlib替代os.path的方法实例
    目录前言pathlib 库pathlib 获取文件路径Path.cwd 获取当前文件夹路径获取当前文件路径获取 Path 对象绝对路径一些常用的获取文件属性获取上层,上上层目录获取用...
    99+
    2024-04-02
  • python3怎么利用pathlib替代os.path
    这篇文章主要介绍“python3怎么利用pathlib替代os.path”,在日常操作中,相信很多人在python3怎么利用pathlib替代os.path问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pyt...
    99+
    2023-06-30
  • python3的实例方法
    1. 语法class 类型(继承列表):def 实例方法名(self,形式参数1,形式参数2,...)    "文档字符串"    语句..2. 作用用于描述一个对象的行为.,让此类型的全部对象都拥有相同的行为3. 说明实例方法实质是函数,...
    99+
    2023-01-31
    实例 方法
  • 使用Python3安装pip的顺利方法
    如何在Python3中顺利安装pip? 随着Python的广泛应用,开发者们常常需要使用到pip来管理和安装Python包。然而,在某些情况下,安装pip并不是一件容易的事情。本文将介绍如何在Python3中顺利安装pip,并提...
    99+
    2024-01-18
    Python pip 安装
  • Java利用StringBuffer替换特殊字符的方法实现
    在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的“。”和全角状态下的“.”替换为...
    99+
    2024-04-02
  • 如何实现MySQL中ROLLUP的替代方法
    小编给大家分享一下如何实现MySQL中ROLLUP的替代方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从MySQL中提取数据...
    99+
    2024-04-02
  • 利用python3随机生成中文字符的实现方法
    前言 运行环境在Python3.6下,Python2的解决方案网上有很多.,想学习python2实现的朋友们可以参考这篇文章:http://www.lsjlt.com/article/34884.htm,下...
    99+
    2022-06-04
    中文 字符 方法
  • 利用java实现动态代理的方法
    这篇文章将为大家详细讲解有关利用java实现动态代理的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java 动态代理的方法总结AOP的拦截功能是由java中的动态代理来实现的。说白了,...
    99+
    2023-05-31
    java 动态代理 ava
  • python3实现常见的排序算法(示例代码)
    冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列...
    99+
    2024-04-02
  • python3利用smtplib通过qq邮箱发送邮件方法示例
    前言 本文主要给大家介绍了关于python3 smtplib通过qq邮箱发送邮件的相关内容, smtplib模块是smtp简单邮件传输协议客户端的实现,为了通用性,有时候发送邮件的时候要带附件或图片,用em...
    99+
    2022-06-04
    示例 发送邮件 邮箱
  • Python3学习urllib的使用方法示例
    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址符)了,可以利用它来抓取远程的数据进行保存,本文整理了一些关于urllib使用中的一些关于head...
    99+
    2022-06-04
    示例 使用方法 urllib
  • Python pandas替换指定数据的方法实例
    目录一、构造dataframe二、替换指定数据(fillna、isin、replace)1、用"sz"列的同行数据将"bj"列的空值替换掉2、...
    99+
    2024-04-02
  • python实例方法的使用注意及代码实例
    1、实例方法是从属于实例对象的方法,定义实例方法时,第一个参数必须为 self。self 指当前的实例对象。 2、调用实例方法是,不需要也不能给 self 传值,self 由解释器自...
    99+
    2022-11-21
    python 实例方法
  • JS正则表达式替换字符串replace()方法实例代码
    目录replace()方法介绍简单用法重点:函数替换补充:替换特殊字符总结replace()方法介绍 replace()方法执行搜索替换操作。 它接收一个正则表达式作为第一个参数, ...
    99+
    2024-04-02
  • 利用yarn代替npm管理前端项目模块依赖的方法详解
    本文主要给大家介绍了关于yarn代替npm管理前端项目模块依赖的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 什么是 yarn? 简单来说,yarn 是一个与 npm ...
    99+
    2022-06-04
    详解 模块 方法
  • python3中dict(字典)的使用方法示例
    一、clear(清空字典内容) stu = { 'num1':'Tom', 'num2':'Lucy', 'num3':'Sam', } print(stu.clear()) #输出:N...
    99+
    2022-06-04
    示例 使用方法 字典
  • 利用node.js实现反向代理的方法详解
    本文主要给大家介绍的是关于利用node.js实现反向代理的相关内容,分享出供大家参考学习,下面话不多说,来一起看看详细的介绍: 跨域问题是前端开发很常见的问题解决方案有很多种 jsonp返回 Ac...
    99+
    2022-06-04
    详解 方法 node
  • android WakeLock使用方法代码实例
    Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕...
    99+
    2022-06-06
    方法 Android
  • 利用Python实现K-Means聚类的方法实例(案例:用户分类)
    目录K-Means聚类算法介绍K-Means聚类算法基础原理K-Means聚类算法实现流程开始做一个简单的聚类数据导入数据探索 开始聚类查看输出结果聚类质心K-Means聚...
    99+
    2024-04-02
  • 利用JS实现二叉树遍历算法实例代码
    目录前言 一、二叉树 1.1、遍历二叉树 1.2、用js表示二叉树 1.3、前序遍历算法 1.4、中序遍历算法 1.5、后序遍历算法 1.6、按层遍历算法 二、算法题 1.1、二叉树...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作