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

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

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

1. 常用操作

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

1.1. 构造路径

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

from pathlib import Path

fp = "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的改进带来的好处。

高效文件处理:Python pathlib实战指南的更多相关文章

  1. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  2. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...

  3. 《Python开发实战》

    <Python开发实战> 基本信息 作者: (日)BePROUD股份有限公司 译者: 盛荣 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115320896 上架时 ...

  4. Python 编码风格指南

    原文:http://python.jobbole.com/84618/ 本文超出 PEP8 的范畴以涵盖我认为优秀的 Python 风格.本文虽然坚持己见,却不偏执.不仅仅涉及语法.模块布局等问题,同 ...

  5. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  6. Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  7. Python接口测试实战5(上) - Git及Jenkins持续集成

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  8. Python接口测试实战4(上) - 接口测试框架实战

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  9. Python接口测试实战2 - 使用Python发送请求

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  10. Python接口测试实战1(下)- 接口测试工具的使用

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

随机推荐

  1. ftrace options 中的irq-info

    /sys/kernel/debug/tracing/options/irq_info 是 ftrace 中的一个选项,用于启用或禁用有关中断的详细信息的跟踪. options/irq_info 的具体 ...

  2. uprobe

    本章的我们来学习uprobe ,顾名思义,相对于内核函数/地址的监控,主要用于用户态函数/地址的监控.听起来是不是有点神奇,内核怎么监控用户态函数的调用呢?本章的内容包括: 如何使用uprobe 内核 ...

  3. 关于set实现结构体自动去重原理的推论

    转自本人博客,原文链接 先说结论 在每个操作均为log复杂度的前提下,set无法在判断顺序和重复关键字不同时完成对结构体元素的去重. 首先我们先看这段结构体定义,目的是先按num相等进行去重,再按ke ...

  4. 2024年4月中国数据库排行榜:OceanBase再度登顶,KingBase稳步上升进前五

    春风劲吹,迎来了2024年4月中国流行度排行榜.纵观本月榜单,各家数据库产品你追我赶,名次呈现微妙变动,它们正以不可忽视的力量,推动着中国乃至全球的数据管理革新.在这春意盎然的四月,让我们继续关注这些 ...

  5. .NET高级调试 - 3.12 sosex实用的几个命令介绍

    简介 sosex是sos的一个拓展,主要目的是将一些繁琐的排查过程脚本化,比如探测死锁,设置断点等.更加方便快捷协助我们排查问题. 比较可惜的是,在.net core中不可用,作者已经不更新了. 更多 ...

  6. javascript语法--for in、for of和forEach

    首先看简单for循环效果,功能最基本,但可以实现所有循环功能 for (let i = 0; i < list.length; i++) { } 接下来看for in.for of和forEac ...

  7. SSIS作业提示所请求的 OLE DB 访问接口 Microsoft.ACE.OLEDB.12.0 尚未注册

    没有跨不过的坎,也没有解决不了的问题,那些曾经没有把我们打死的困难,最终都会让我们变得更加强大 最近在使用ETL获取Excel数据时,在本地运行没有任何问题,部署到服务器后,使用作业运行时便一直提示以 ...

  8. Hadoop未授权访问

    Hadoop未授权访问 是什么? Hadoop 是一种用来处理和存储大量数据的软件工具,可以用来日志分析,推荐系统,数据备份   核心组件: 存储大数据:HDFS 文件系统 处理大数据:MapRedu ...

  9. CUDA编程学习 (1)——CUDA C介绍

    1. 内存分配和数据移动 API 函数 CUDA编程模型是一个异构模型,需要CPU和GPU协同工作.在CUDA中,host 和 devic e 是两个重要的概念,我们用host指代CPU及其内存,而用 ...

  10. Nuxt.js 应用中的 vite:extend 事件钩子详解

    title: Nuxt.js 应用中的 vite:extend 事件钩子详解 date: 2024/11/11 updated: 2024/11/11 author: cmdragon excerpt ...