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

news/2024/12/2 9:59:36/

简介

这次要介绍的是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 Pathpath = 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 Pathpath = 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 Pathpath = 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 Pathpath = 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 Pathfpath = Path("/home/user/test.txt")# 文件大小
print(fpath.stat().st_size)  # 11
# 文件修改日期和时间
print(fpath.stat().st_mtime)  # 1620000000.0
# 文件创建日期和时间
print(fpath.stat().st_ctime)  # 1620000000.0dpath = 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生活愉快!


http://www.ppmy.cn/news/1268892.html

相关文章

串口通信(4)-C#串口通信入门实例

本文通过实例讲解C#串口通信。 入门实例设计一个串口助手&#xff0c;能够很好的涵盖串口要点的使用。 目录 一、成品图 二、界面文件 三、后台代码 四、实例中要点 一、成品图 如下&#xff1a; 实现的过程 创建winform项目&#xff0c;将Form1文件的名称改为MainForm&…

当当狸AR智能学习图集跨越千年文明传承,邀您“面对面”与虚拟诗人互动对诗

中华传统文化底蕴深厚&#xff0c;余韵悠长。即使经过千年的历史裂变&#xff0c;依然历久铭心慰藉着一代又一代人的灵魂。千百年后的今天&#xff0c;成为了我们独一无二的财富。 如今&#xff0c;国人学习中华传统文化的方式有很多&#xff0c;诗词集、动画影片、诗歌传颂等…

文档或书籍扫描为 PDF:ScanPapyrus Crack

ScanPapyrus 可让您快速轻松地将文档或书籍扫描为 PDF&#xff0c;批处理模式使扫描过程快速高效&#xff0c;自动处理书籍并将其拆分为单独的页面 用于快速扫描文档、书籍或打印照片的扫描仪软件 快速扫描文档 使用此扫描仪软件&#xff0c;您无需在扫描仪和计算机之间来回移动…

在HTML中如何设置音频和视频?

目录 一、设置音频二、设置视频 一、设置音频 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body> <!-- controls:控制播放暂停的按钮autop…

QStringListModel 是 Qt 框架中用于在模型-视图(Model-View)架构中展示字符串列表的类

QStringListModel 是 Qt 框架中用于在模型-视图&#xff08;Model-View&#xff09;架构中展示字符串列表的类。 QStringListModel 继承自 QAbstractListModel&#xff0c;是一个基于字符串列表的数据模型。它提供了一种方便的方式来将字符串列表作为数据源&#xff0c;供各种…

Leetcode 2454. 下一个更大元素 IV

Leetcode 2454. 下一个更大元素 IV题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。如果 nums[j] 满足以下条件&#xff0c;那么我们称它为 nums[i] 的 第二大 整数&#xff1a; j >nums[j] > nu…

simulink自定义用户库、模块封装及案例测试

目录 前言 1. 自定义常用大模块 2. 自定义库 3.将模块加入库浏览器

SpringBoot对PDF进行模板内容填充、电子签名合并

1. 依赖引入–这里只包含额外引入的包 原有项目包不含括在内 <!-- pdf编辑相关--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version> </dependency><de…