Python pathlib模块

news/2024/11/28 10:57:36/

pathlib 模块提供了表示文件系统路径的类,可适用于不同的操作系统。使用 pathlib 模块,相比于 os 模块可以写出更简洁,易读的代码。pathlib 模块中的 Path 类继承自 PurePath,对 PurePath 中的部分方法进行了重载,相比于 os.path 有更高的抽象级别。本文将带你学习如何使用 pathlib 模块中的 Path 类读写文件、操纵文件路径和基础文件系统,统计目录下的文件类型以及查找匹配目录下某一类型文件等。下面就开始进入我们的学习时刻。

1 获取目录

  • Path.cwd(),返回文件当前所在目录。

  • Path.home(),返回用户的主目录。

应用示例:

from pathlib import PathcurrentPath = Path.cwd()homePath = Path.home()print("文件当前所在目录:%s\n用户主目录:%s" %(currentPath, homePath))

2 目录拼接

斜杠 / 操作符用于拼接路径,比如创建子路径。

应用示例:​​​​​​​

from pathlib import PathcurrentPath = Path.cwd()newPath = currentPath / 'python-100'print("新目录为:%s" %(newPath))

3 创建、删除目录

  • Path.mkdir(),创建给定路径的目录。

  • Path.rmdir(),删除该目录,目录文件夹必须为空。

应用示例:​​​​​​​

from pathlib import PathcurrentPath = Path.cwd()makePath = currentPath / 'python-100'makePath.mkdir()print("创建的目录为:%s" %(nmakePath))​​​​​​​
from pathlib import PathcurrentPath = Path.cwd()delPath = currentPath / 'python-100'delPath.rmdir()print("删除的目录为:%s" %(delPath))

4 读写文件

  • Path.open(mode='r'),以 "r" 格式打开 Path 路径下的文件,若文件不存在即创建后打开。

  • Path.read_bytes(),打开 Path 路径下的文件,以字节流格式读取文件内容,等同 open 操作文件的 "rb" 格式。

  • Path.read_text(),打开 Path 路径下的文件,以 str 格式读取文件内容,等同 open 操作文件的 "r" 格式。

  • Path.write_bytes(),对 Path 路径下的文件进行写操作,等同 open 操作文件的 "wb" 格式。

  • Path.write_text(),对 Path 路径下的文件进行写操作,等同 open 操作文件的 "w" 格式。

应用示例:​​​​​​​

from pathlib import PathcurrentPath = Path.cwd()mkPath = currentPath / 'python-100.txt'with mkPath.open('w') as f:  # 创建并以 "w" 格式打开 python-100.txt 文件。    f.write('python-100')  # 写入 python-100 字符串。f = open(mkPath, 'r')print("读取的文件内容为:%s" % f.read())f.close()​​​​​​
from pathlib import PathcurrentPath = Path.cwd()mkPathText = currentPath / 'python-100-text.txt'mkPathText.write_text('python-100')print("读取的文件内容为:%s" % mkPathText.read_text())
str2byte = bytes('python-100', encoding = 'utf-8')mkPathByte = currentPath / 'python-100-byte.txt'mkPathByte.write_bytes(str2byte)print("读取的文件内容为:%s" % mkPathByte.read_bytes())

5 获取文件所在目录的不同部分字段

  • Path.resolve(),通过传入文件名,返回文件的完整路径。

  • Path.name,可以获取文件的名字,包含后缀名。

  • Path.parent,返回文件所在文件夹的名字。

  • Path.stem,获取文件名不包含后缀名。

  • Path.suffix,获取文件的后缀名。

  • Path.anchor,获取文件所在的盘符。

from pathlib import PathtxtPath = Path('python-100.txt')nowPath = txtPath.resolve()print("文件的完整路径为:%s" % nowPath)print("文件完整名称为(文件名+后缀名):%s" % nowPath.name)print("文件名为:%s" % nowPath.stem)print("文件后缀名为:%s" % nowPath.suffix)print("文件所在的文件夹名为:%s" % nowPath.parent)print("文件所在的盘符为:%s" % nowPath.anchor)

6 文件、路径是否存在判断

  • Path.exists(),判断 Path 路径是否指向一个已存在的文件或目录,返回 True 或 False。

  • Path.is_dir(),判断 Path 是否是一个路径,返回 True 或 False。

  • Path.is_file(),判断 Path 是否指向一个文件,返回 True 或 False

from pathlib import PathcurrentPath = Path.cwd() / 'python'
print(currentPath.exists())  # 判断是否存在 python 文件夹,此时返回 False。print(currentPath.is_dir())  # 判断是否存在 python 文件夹,此时返回 False。
currentPath.mkdir()  # 创建 python 文件夹。
print(currentPath.exists())  # 判断是否存在 python 文件夹,此时返回 True。print(currentPath.is_dir())  # 判断是否存在 python 文件夹,此时返回 True。
currentPath = Path.cwd() / 'python-100.txt'
print(currentPath.exists())  # 判断是否存在 python-100.txt 文件,此时文件未创建返回 False。print(currentPath.is_file())  # 判断是否存在 python-100.txt 文件,此时文件未创建返回 False。
f = open(currentPath,'w')  # 创建 python-100.txt 文件。f.close()
print(currentPath.exists())  # 判断是否存在 python-100.txt 文件,此时返回 True。print(currentPath.is_file())  # 判断是否存在 python-100.txt 文件,此时返回 True。

7 文件统计以及匹配查找

  • Path.iterdir(),返回 Path 目录文件夹下的所有文件,返回的是一个生成器类型。

  • Path.glob(pattern),返回 Path 目录文件夹下所有与 pattern 匹配的文件,返回的是一个生成器类型。

  • Path.rglob(pattern),返回 Path 路径下所有子文件夹中与 pattern 匹配的文件,返回的是一个生成器类型。

# 使用 Path.iterdir() 获取当前文件下的所有文件,并根据后缀名统计其个数。import pathlibfrom collections import CountercurrentPath = pathlib.Path.cwd()gen = (i.suffix for i in currentPath.iterdir())print(Counter(gen))​​​​​
import pathlibfrom collections import CountercurrentPath = pathlib.Path.cwd()gen = (i.suffix for i in currentPath.glob('*.txt'))  # 获取当前文件下的所有 txt 文件,并统计其个数。print(Counter(gen))gen = (i.suffix for i in currentPath.rglob('*.txt'))  # 获取目录中子文件夹下的所有 txt 文件,并统计其个数。print(Counter(gen))

8 总结

本文给大家介绍了 Python 的 pathlib 模块,为 Python 工程师对该模块的使用提供了支撑,让大家了解如何使用 pathlib 模块读写文件、操纵文件路径和基础文件系统,统计目录下的文件类型以及查找匹配目录下某一类型文件等。


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

相关文章

RESTful接口设计规范

RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计。从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest。 REST与技术无关,它代表的是一种软件架构风格,REST它是 Representational State Trans…

【leetcode】Find Median From Data Stream

参考资料:左神算法课《剑指offer》 295. Find Median from Data Stream The median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value, and the median is the mean of the two middle values. For ex…

【C++初阶】动态内存管理

一.C内存分布 说明: 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的; 2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信&…

H-THNSJ0A温湿度传感器标准modbus 通讯协议

1、 概述 1.1 引言 通讯规约详细描述了本机通讯的读、写命令格式及信息和数据的定义,以便第三方开发使用。 1. 2 电气特点及符合标准 1) 连接上位机的主通信接口,MODUBS RTU 协议标准。 2) 信息传输方式为异步方式,字节格式为…

Leetcode 221. 最大正方形

Leetcode 221. 最大正方形题目 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。m matrix.lengthn matrix[i].length1 < m, n < 300matrix[i][j] 为 ‘0’ 或 ‘1’ 解法 动态规划状态压缩&#xff1a;定…

Android系统原理性问题分析 - 单路情况下的C/S模型

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。Android系统中很多地方都采用了I/O多路复用的机制&#xff0c;为了引出I/O多路复用机制&#xff0c;先来分析多路并发情况下的C/S模型。此篇参考一些博客和书籍&#xff0c;代码基于A…

Java的ssm框架中开发常用注解的作用和功能小小总结!!!

Java 的 SSM (Spring SpringMVC MyBatis) 框架是 Java Web 开发中常用的框架之一。其中&#xff0c;Spring、SpringMVC、MyBatis 框架各自都提供了很多注解&#xff0c;以下是一些常用注解及其功能&#xff1a; Spring 框架常用注解 Component&#xff1a;用于标记一个类为组…

视频会议产品对比分析

内网视频会议系统如何选择&#xff1f;有很多单位为了保密&#xff0c;只能使用内部网络&#xff0c;无法连接互联网&#xff0c;那些SaaS视频会议就无法使用。在内网的优秀视频会议也有很多可供选择&#xff0c;以下是几个常用的&#xff1a; 1. 宝利通&#xff1a;它支持多种…