【python】比起os.path,Pathlib太方便了

简介

这次要介绍的是Python的标准库pathlib。 (第N次……)
老实说,这个标题有点夸张,但是pathlib比os.path更方便,不妨一试!

什么是pathlib?

pathlib 是一个用于处理文件路径的库。
通过pathlib,可以将文件路径视为对象而不是字符串。

os.path 还不够吗?

pathlib 相对 os.path 有以下优点:

  • 丰富的方法
    pathlib 将文件路径视为对象,因此可以对文件路径执行各种操作。
  • 接纳了路径分隔符的差异。
    pathlib 接纳因操作系统而异的路径分隔符。
    例如,Windows 使用 \,Linux 使用 /,若使用 pathlib,则可以在任一操作系统上运行相同的代码。
  • 易于组合路径
    pathlib 可以使用 / 运算符组合路径。
    例如,使用 / 运算符组合 /home/user 和 /home/user/test.txt 会生成 /home/user/test.txt。

主要类型

在这里插入图片描述从这里引用
基本上,使用Path类首先了解该类的结构,这样当该类出现时就不会感到困惑。

  • PurePath
    用于表达与OS(操作系统)无关的路径的类

  • PurePosixPath
    用于表示 Linux 和 MacOS 路径的类

  • PureWindowsPath
    用于表示 Windows 路径的类

  • Path
    用于表示 Windows 路径的类

  • WindowsPath,PosixPath
    继承自Path的类,在Path中添加依赖于操作系统的文件系统操作。
    父类是独立于操作系统的 PureWindowsPath、PurePosixPath 和 Path

立即试用

生成路径

pathlib 使用 Path 类来生成路径。

from pathlib import Path

# 绝对路径
path = Path("/home/user/test.txt")

# 如果并排写,将被合并。
path = Path("/home", "user", "test.txt") # /home/user/test.txt

# 但请注意,如果并排写入两个或多个绝对路径,则先写入的路径将被忽略。
path = Path("/home", "/user", "test.txt") # /user/test.txt

# 想对路径
path = Path("test.txt")
# 当前目录
path = Path.cwd()

连接路径

可以使用 / 运算符组合路径。
(第一次看到的时候就被震撼了,因为太方便了……)

from pathlib import Path

# Path对象 + Path对象
path = Path("/home/user") / Path("test.txt")
# Path对象+字符串
path = Path("/home/user") / "test.txt"
# joinpath方法
path = Path("/home/user").joinpath("test.txt")

# 結合結果
print(path)  # /home/user/test.txt

路径分解

from pathlib import Path

path = Path("/home/user/test.txt")

# 目录名
print(path.parent)  # /home/user
# 文件名和扩展名
print(path.name)  # test.txt
# 文件名(没扩展名)
print(path.stem)  # test
# 扩展名
print(path.suffix)  # .txt

请注意,path.suffix 不支持像 tar.gz 这样的多个扩展名,因此必须使用 path.name 自行处理。

检查路径是否存在

就像 os.path.exists 一样,可以使用 path.exists 检查路径是否存在。

from pathlib import Path

path = Path("/home/user/test.txt")

# 路径是否存在
print(path.exists())  # True
# 路径是文件吗?
print(path.is_file())  # True
# 路径是目录吗?
print(path.is_dir())  # False

转换相对路径和绝对路径

可以使用 Path.relative_to(<相对引用路径>) 将绝对路径转换为相对路径。
可以使用== Path.absolute()== 将相对路径转换为绝对路径。
Path.resolve() 可以解析包含 … 或 . 的路径。

路径的处理

pathlib 允许对路径执行各种操作。

from pathlib import Path

path = Path("/home/user/test.txt")

# 移动/重命名路径(不覆盖)
path.rename("/home/user/test2.txt")
# 移动/重命名路径(覆盖)
path.replace("/home/user/test2.txt")
# 创建路径
path.mkdir() # 也可以使用parents=True来创建父目录
# 删除路径
path.rmdir()

文件操作

pathlib 可对文件执行各种操作。

from pathlib import Path

path = Path("/home/user/test.txt")

# 加载文件
path.read_text()
# 写入文件
path.write_text("Hello World!")
# 删除文件
path.unlink() # rmdir() 用于目录

加载json的例子

from pathlib import Path
import json

# 加载文件
path = Path("/home/user/test.json")
data = json.loads(path.read_text())
# 写入文件
path.write_text(json.dumps(data))

使用pathlib来写比使用open()更简洁。
特别是不必编写关闭文件的过程,这简化了代码。

获取信息

from pathlib import Path

fpath = Path("/home/user/test.txt")

# 文件大小
print(fpath.stat().st_size)  # 11
# 文件修改日期和时间
print(fpath.stat().st_mtime)  # 1620000000.0
# 文件创建日期和时间
print(fpath.stat().st_ctime)  # 1620000000.0

dpath = Path("/home/user")

# 获取目录内容
print(list(dpath.iterdir()))  # [PosixPath('/home/user/test.txt')]
# 递归获取目录内容
print(list(dpath.glob("**/*")))  # [PosixPath('/home/user/test.txt')]
# 递归获取文件
print(list(dpath.glob("**/*.txt")))  # [PosixPath('/home/user/test.txt')]

总结

在处理复杂的文件结构时,pathlib 总是派上用场。你觉得呢?
请尝试使用它,祝您Python生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

随记-nginx docker + SSL 配置 - 配置等资源挂宿主机

随记-Nginx docker SSL 配置 - 配置等资源挂宿主机等 笔者动手配置&#xff0c;随手写的笔者&#xff0c;保证可操作 话说现在padmon是不是已经有代替docker的趋势了&#xff0c;谁能告诉我一把&#xff1f; 配置前准备 # 拉取nginx镜像 docker pull nginx #启动(暂时) doc…

基于YOLOv8深度学习的水稻害虫检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Mysql】InnoDB的表空间(九)

概述 表空间是一个在 InnoDB 中比较抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;而对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ibd 的实际文件。可以把表空间想象成由很多个页组成的池子&…

gin使用自签名SSL证书与自签名证书不受信任方法解决

文章目录 1. X.509 V3证书介绍2、使用openssl生成自签名证书和解决不受信任问题2.1、生成根证书2.2、为域名生成证书申请文件2.3、为域名创建证书的扩展描述文件2.4、为域名创建证书 3、Go应用中使用自签名证书3.1、gin框架调用实现3.2、运行效果 4、使用java的bouncycastle生成…

HarmonyOS 开发实例—蜜蜂 AI 助手

HarmonyOS 开发实例—蜜蜂 AI 助手 1. 前言 自华为宣布 HarmonyOS NEXT 全面启动&#xff0c;近期新浪、B 站、小红书、支付宝等各领域头部企业纷纷启动鸿蒙原生应用开发。据媒体统计&#xff0c;如今 Top20 的应用里&#xff0c;已经有近一半开始了鸿蒙原生应用开发。虽然目…

【Jmeter】Jmeter基础4-Jmeter元件介绍之监听器

2.4、监听器 监听器主要用于收集、统计、查看和分析结果。 2.4.1、察看结果树 作用&#xff1a;查看取样器请求和响应结果&#xff0c;包括消息头&#xff0c;请求的数据&#xff0c;响应的数据等。一般在调试时才用&#xff0c;在实际运行压测时建议禁用&#xff0c;因为大量…

SpringBoot项目打成War包部署

简介 一般情况下&#xff0c;在SpringBoot项目开发完成进行服务器部署时&#xff0c;都是打成JAR包进行部署运行的。但是在有些情况下也需要将其打成War包使用Tomcat进行部署。本篇文章就简单介绍一下SpringBoot如何打成War包。 操作步骤 1、修改pom文件 首先&#xff0c;要…

蓝牙与其他无线技术的比较:优势与局限

在无线技术的世界中&#xff0c;蓝牙技术因其独特的特性和广泛的应用而脱颖而出。然而&#xff0c;像所有技术一样&#xff0c;蓝牙也有其优势和局限性&#xff0c;特别是当与其他无线技术如Wi-Fi、Zigbee和NFC等进行比较时。本文旨在探讨这些不同技术的关键特点&#xff0c;以…

Android---Kotlin 学习001

Kotlin 的诞生 2011年&#xff0c;JetBrains 宣布开发 Kotlin 编程语言&#xff0c;这门新语言可以用来编写在 Java 虚拟机上运行的代码&#xff0c;是 Java 和 Scale 语言之外的又一选择。2017年&#xff0c;Google 在赢得与 Oracle 的诉讼一年后&#xff0c;Google 宣布 Ko…

大数据云计算之OpenStack

大数据云计算之OpenStack 1.什么是OpenStack&#xff0c;其作用是什么&#xff1f;OpenStack主要的组成模块有哪些&#xff1f;各自的主要作用是什么&#xff1f; OpenStack是一个开源的云计算平台&#xff0c;旨在为企业和服务提供商提供私有云和公有云的建设和管理解决方案…

显示曾连接过的wifi密码

windows 11 可以直接显示当前连接的密码&#xff0c;或者历史连接保存密码的wifi 也可以使用命令 “nova 9” 是连接过的wifi

基于YOLOv8的农作物水稻病害检测系统,优化SPPF提升检测精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;农作物水稻病害首先进行数据处理到训练模型&#xff0c;最好优化SPPF提升检测精度&#xff0c;map0.5从原始的0.807提升至0.821 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模…

玩转大数据16:大数据存储与文件格式优化

随着大数据时代的到来&#xff0c;存储和处理海量数据成为了一个重要的挑战。在大数据存储中&#xff0c;选择合适的文件格式对数据的压缩率、读写性能和扩展性起着关键作用。本文将介绍大数据存储的挑战&#xff0c;探讨常见的文件格式&#xff0c;并深入讨论文件格式优化的策…

Zxing库的使用⭐️实现给自己的博客主页生成一张二维码链接,有源码可以直接复制到本地执行

目录 前言 一、简介 二、本地实现 2.1 引入依赖&#xff08;根据自己springboot项目来&#xff09; 2.2 实现类 三、运行一次 前言 小伙伴们大家好&#xff0c;自从地铁上刷到Zxing库的使用后&#xff0c;一直想本地部署玩一玩 一、简介 ZXing&#xff08;全称为 Zebra Cr…

leetcode-138-随机链表的复制(Java实现)

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点…

教你用JMeter做接口测试的几个简单实例

前言 这次小项目是基于HTTP协议的接口&#xff0c;通过JMeter来完成一次基本的接口测试&#xff0c;完整复习一下JMeter的基本操作。 在实际项目中&#xff0c;测试也要先从开发那拿到接口说明书&#xff0c;分析熟悉业务后&#xff0c;写接口的测试用例&#xff0c;最后再在…

换能器信号工作原理

一、ANB板子发送一个周期&#xff0c;频率为40M和60M的 78V的激励脉冲信号。如下图 频率越高&#xff0c;周期越短。图像分辨率更高。原因如下&#xff1a; ①由于采用的是纵向分辨率。相邻两个点之间必须要间隔 下图的2分之兰大才能被识别。 二、当信号给到换能器后&#xf…

JS基础之变量对象

JS基础之变量对象 变量对象基础变量对象全局上下文函数上下文执行过程进入执行上下文代码执行思考题 变量对象 基础 当JavaScript代码执行一段可执行代码&#xff08;executable code&#xff09;时&#xff0c;会创建对应的执行上下文&#xff08;execution context&#xff…

redis-学习笔记(Jedis list简单命令)

lpush & lrange lpush 头插, 第二个参数为变长参数, 即可以一次往里面添加 N 个值 lrange 获取列表某一下标区间的内容, 注意返回值类型 代码演示 rpush & rpop & lpop rpush 在列表中尾插数据, 第二个参数仍是边长列表 lpop 头删 rpop 尾删 代码演示 blpop & …