高效文件处理:Python pathlib实战指南

news/2025/1/6 11:22:30/文章来源:https://www.cnblogs.com/wang_yb/p/18602142

在使用Python处理文件路径时,强烈建议使用pathlib

pathlib以面向对象的方式处理文件路径,既避免了很多陷阱,也能使执行许多路径的相关操作变得更容易。

本篇总结了常用的使用pathlib进行文件路径处理的方法。

1. 常用操作

首先介绍如何使用pathlib来完成一些常规的文件路径相关操作。

1.1. 构造路径

构建路径对象,只需要将文件或文件夹路径的字符串传给Path即可。

from pathlib import Pathfp = "D:\\temp\\pathlib"
path = Path(fp)
path# path 对象
# WindowsPath('D:/temp/pathlib')

构造路径对象之后,Path会自动判断出是windows还是linux下的路径。

1.2. 拼接和拆分路径

用字符串来拼接和拆分路径时,最麻烦的就是不同系统中路径分隔符(\ 和 /)的处理。

使用Path对象,能够避免此困扰。

new_path = path.joinpath("abc")
new_path
# WindowsPath('D:/temp/pathlib/abc')new_path = Path(fp, "test.py")
new_path
# WindowsPath('D:/temp/pathlib/test.py')

使用joinpath或者直接创建Path对象时拼接路径,不需要指定路径分隔符。

使用Path拆分路径也方便,它提供了多个属性来获取文件信息。

my_path = Path(fp, "program.py")
my_path
# WindowsPath('D:/temp/pathlib/program.py')# 文件完整名
my_path.name
# 'program.py'# 文件目录
my_path.parent
# WindowsPath('D:/temp/pathlib')# 文件名(不带后缀)
my_path.stem
# 'program'# 文件后缀名
my_path.suffix
# '.py'# 修改文件后缀
my_path.with_suffix(".go")
# WindowsPath('D:/temp/pathlib/program.go')

1.3. 相对路径和绝对路径

相对路径转换为绝对路径,推荐使用Path对象的resolve方法。

path = Path("main.py")
path
# WindowsPath('main.py')# 转换为绝对路径
path.resolve()
# WindowsPath('D:/projects/python/samples/main.py')

1.4. 遍历目录

遍历目录也是常用的文件路径操作。

fp = "D:\\temp\\pathlib\\a"
path = Path(fp)for f in path.glob("*.txt"):print(f)# D:\temp\pathlib\a\1.txt
# D:\temp\pathlib\a\2.txt
# D:\temp\pathlib\a\3.txt

glob函数是只遍历目录下的文件,如果要遍历子目录中的文件,使用rglob函数。

for f in path.rglob("*.txt"):print(f)# D:\temp\pathlib\a\1.txt
# D:\temp\pathlib\a\2.txt
# D:\temp\pathlib\a\3.txt
# D:\temp\pathlib\a\sub_a\sub_1.txt

1.5. 读写文件

传统的读写文件方式,一般都是两个步骤:先通过open函数打开文件,再进行读或者写。

# 写入
with open("d:\\readme.txt", "w") as f:f.write("abcdefg")# 读取
with open("d:\\readme.txt", "r") as f:content = f.read()print(content)# abcdefg

使用Path对象,读写操作更加简单,代码也更清晰。

fp = "d:\\readme.txt"
path = Path(fp)
path.write_text("uvwxyz")content = path.read_text()
print(content)
# uvwxyz

2. 更方便的操作

除了上面的常用操作,对于下面这些略微复杂文件路径的操作,

使用Path也能更容易的完成。

2.1. 检查文件或目录是否存在

fp = "D:\\temp\\pathlib\\a"
path = Path(fp)path.is_dir() # True
path.is_file() # False
path.exists() # True

2.2. 创建目录

创建目录使用Path对象可以帮助我们自动处理异常情况。

path = Path("D:\\temp\\a\\b\\c\\d")
path.mkdir(exist_ok=True, parents=True)

exist_okparents参数为了创建文件夹时省了很多判断。

exist_ok=True表示如果文件夹d存在就不创建,也不报错,反之会报错。

parents=True表示文件夹d的上层的各级文件夹如果不存在就自动创建,反之如果文件夹d的上层有不存在的文件夹则报错。

2.3. 路径自动规范化

使用Path来操作路径,不用过于关心不同操作系统的路径分割符问题。

windows系统中,也可以使用linux的路径分割符,比如,下面两种方式都可以正常运行。

fp = "D:\\temp\\pathlib\\a"
path = Path(fp)fp = "D:/temp/pathlib/a"
path = Path(fp)

3. 与os.path对比

pathlib主要就是为了取代os.path,它们之间的对比整理如下:

路径操作 **pathlib ** os.path
读取所有文件内容 path.read_text() open(path).read()
获取绝对文件路径 path.resolve() os.path.abspath(path)
获取文件名 path.name os.path.basename(path)
获取父目录 path.parent os.path.dirname(path)
获取文件扩展名 path.suffix os.path.splitext(path)[1]
文件名(不包含扩展名) path.stem os.path.splitext(path)[0]
相对路径 path.relative_to(parent) os.path.relpath(path, parent)
验证路径是否为文件 path.is_file() os.path.isfile(path)
验证路径是否为目录 path.is_dir() os.path.isdir(path)
创建目录 path.mkdir(parents=True) os.makedirs(path)
获取当前目录 pathlib.Path.cwd() os.getcwd()
获取主目录 pathlib.Path.home() os.path.expanduser("~")
按模式查找文件 path.glob(pattern) glob.iglob(pattern)
递归查找文件 path.rglob(pattern) glob.iglob(pattern, recursive=True)
规格化路径分隔符 pathlib.Path(name) os.path.normpath(name)
拼接路径 Path(paraent, name) os.path.join(parent, name)
获取文件大小 path.stat().st_size os.path.getsize(path)
遍历文件树 path.walk() os.walk()
将文件重定向到新路径 path.rename(target) os.rename(path, target)
删除文件 path.unlink() os.remove(path)

对比两种方式,就能体会pathlib的改进带来的好处。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABB IRB4400机器人示教器维修黑屏问题

当ABB机器人IRB4400的示教器出现黑屏问题时,可能的原因包括硬件故障、软件冲突或外部干扰。以下是一些可能的解决方法:硬件故障检查:检查示教器显示屏是否损坏或老化。检查与显示屏连接的电缆或电路板是否出现故障。更换损坏的部件。软件冲突检查:检查示教器的操作系统或应…

使用正点原子的直流无刷驱动板自写FOC控制永磁同步(PMSM)电机(开环位置)

由于ST官方MotorControlWorkbench生成的FOC代码过于复杂,决定自己使用正点原子的直流无刷驱动板自己编写FOC去控制PMSM电机。FOC代码参考的是灯哥的教材DengFOC官方文档。 1、配置TIM1高级定时器 2、foc.c代码/** foc.c** Created on: Dec 11, 2024* Author: ME-LZQ*/#i…

【Office Access 2024软件下载与安装教程】

1、安装包 「Office LTSC 2024」: 链接:下载地址2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压下载的安装包,双击Setup.exe安装,弹窗安装对话框2) 只留Access选项,点击一键安装3) 保持联网状态 部分在线下载更新4) 安装完成后,解压…

冬季节假日跨境电商运营压力大,哪六款软件能提升效率?

在跨境电商行业,冬季节假日的订单高峰期犹如一场紧张而关键的战役。每一个环节都需要紧密衔接、高效运转,才能在汹涌的订单浪潮中乘风破浪,收获丰硕成果。对于 J 人主导的跨境电商团队公司而言,可视化团队协作办公软件就如同战场上的精良武器,助力团队精准作战,高效协同。…

年底了,产品经理如何写好一份年终工作报告?

项目管理软件在产品经理年终汇报中发挥着关键作用。它不仅帮助产品经理高效整理和展示数据,提高汇报的准确性和逻辑性;还通过实时同步项目进度和风险管理功能,帮助产品经理及时发现问题并采取措施;同时,通过制定详细的汇报大纲和数据驱动的汇报方式,提高了汇报的专业性和…

告别混乱:文档管理系统如何重塑团队工作?

在当今数字化飞速发展的时代,团队协作效率成为企业成功的关键因素之一。而一款出色的文档管理系统软件,就如同团队的智慧中枢,默默地为各项工作提供强大的支持。 以一个项目制的营销团队为例,在日常工作中,从项目策划到执行,涉及大量的文档资料。如市场调研报告、创意策划…

信而泰推出POE交换机一站式自动化测试方案

方案背景 传统POE交换机测试工序主要有扫条码,接网线,POE供电测试,流量测试,LED测试,信息核对等,基本都依赖于手工操作,效率偏低,并且LED测试,POE供电测试依赖人工判断是否良品,容易误测。如果再考虑到操作员工变动等因素,培训员工的时间,员工操作方法不统一等情况…

自定义typeHandler将包含经纬度对象插入到mysql的point类型的字段中

自定义typeHandler将包含经纬度对象插入到mysql的point类型的字段中博客:https://www.emanjusaka.top 公众号:emanjusaka的编程栈 下面给出关键部分代码,完整代码请访问原文地址mysql 中的 point 类型在 java 中没有对应的类型匹配,需要我们自定义 typeHandler 去处理。 环…

cortex-m3基础-概览

cortex-m3是一个32位处理器内核:总线(数据、地址)宽度是32位、寄存器位宽是32位;内核结构为哈佛结构,拥有独立的数据总线和指令总线,可以并行进行指令执行和数据访问;简介cortex-m3是一个32位处理器内核:总线(数据、地址)宽度是32位、寄存器位宽是32位;内核结构为哈…

渠道管理智慧:与新华三谈数字化革新与共赢策略

智算智存全能担当 新华三集团作为数字化解决方案领导者,致力于成为客户业务创新、数字化转型值得信赖的合作伙伴。作为紫光集团旗下的核心企业,新华三通过深度布局"云-网-算-存-端"全产业链,不断提升数字化和智能化赋能水平。新华三拥有计算、存储、网络、5G、安全、…

RocksDB 内存超限问题剖析

在使用 RocksDB 存储引擎的过程中,有部分开发者遇到了内存使用超出预期的情况。本文针对这一问题展开了深入分析,并提出了相应的解决方案和优化建议,提升系统性能和稳定性。作者:来自 vivo 互联网服务器团队- Zeng Luobin在使用 RocksDB 存储引擎的过程中,有部分开发者遇到…

20242822《Linux内核原理与分析》第十二周作业

缓冲区溢出漏洞实验 一、实验简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。 二、实验准备…