路径处理库pathlib使用详解

【python】pathlib库的使用,详细 pathlib是 Python 中非常强大且简洁的文件路径操作库,它提供了面向对象的 API,使得路径操作更为直观和简便。你可以通过它来轻松进行文件路径的创建、检查、遍历、操作等任务。通过Path类,你可以跨平台处理文件路径,避免平台差异带来的问题。 阅读详情

在编程中处理文件的读写操作时免不了要和文件路径打交道,甚至有时候为了完成某些场景功能会变的有些繁琐,以前在Python中操作文件路径,我们更多的时候是使用os模块。

而到了Python3时代后,Python3的系统标准库pathlib模块的 Path 对路径的操作会更简单。甚至可以说pathlib已经可以完全替代os.path,它完全采用面向对象的编程方式,因为Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径),其语义适用于不同的操作系统,它继承纯路径但也提供I/O化操作,在处理配置路径方面十分简单。

这里要特殊说明下,我们所有的例子中都导入了pathlib2模块而不是pathlib模块,因为简单引用官方的话说就是老版本的pathlib模块已经只作为修复bug模式存在,而新版本的pathlib2是以修补更新的pathlib2而发布的,而且所有的新功能都可以兼容过去的旧版本python。

好了,来让我们看下常用的pathlib操作的例子汇总:

返回当前工作目录路径和Home路径

在pathlib里一切都是面向对象的,只需要调用指定的方法就可以了。

from pathlib2 import Path

# 获取当前目录
current_path = Path.cwd()
print(current_path)

# 输出如下:
# /Users/Anders/Documents/

# 获取Home目录
home_path = Path.home()
print(home_path)

# 输出如下:
# /Users/Anders
父目录操作

你可以看到想要获取一个路径下上级的父目录可以非常方便的直接使用面向对象的方式**.parent**就行了,如果还想上一级就继续以子对象继续操作parent属性就可以了。

from pathlib2 import Path

# 获取当前目录
current_path = Path.cwd()

# 获取上级父目录
print(current_path.parent)

# 获取上上级父目录
print(current_path.parent.parent)

# 获取上上上级父目录
print(current_path.parent.parent.parent)

# 获取上上上上级父目录
print(current_path.parent.parent.parent.parent)

# 获取上上上上级父目录
print(current_path.parent.parent.parent.parent.parent)

# 输出如下:
# /Users/Anders/Documents/Jupyter
# /Users/Anders/Documents
# /Users/Anders
# /Users
# /

当然路径是十分长的,而且在特定的场合我如果想获得每一级的父目录呢,贴心的pathlib已经帮我们想到了,使用parents属性就可以遍历整个父目录了,如下例子的效果和上面的例子是完全一样的,但是就变的非常简便。

# 获取当前目录
from pathlib2 import Path

current_path = Path.cwd()

for p in current_path.parents:
    print(p)

# 输出如下:
# /Users/Anders/Documents/Jupyter
# /Users/Anders/Documents
# /Users/Anders
# /Users
# /
文件名操作

常用的文件名操作属性如下:

  • name 目录的最后一个部分

  • suffix 目录中最后一个部分的扩展名

  • suffixes 返回多个扩展名列表

  • stem 目录最后一个部分,没有后缀

  • with_name(name) 替换目录最后一个部分并返回一个新的路径

  • with_suffix(suffix) 替换扩展名,返回新的路径,扩展名存在则不变

from pathlib2 import Path

# 返回目录中最后一个部分的扩展名
example_path = Path('/Users/Anders/Documents/abc.gif')
print(example_path.suffix)
# 输出如下:
# .gif

# 返回目录中多个扩展名列表
example_paths = Path('/Users/Anders/Documents/abc.tar.gz')
print(example_paths.suffixes)
# 输出如下:
# ['.tar', '.gz']

# 返回目录中最后一个部分的文件名(但是不包含后缀)
example_path = Path('/Users/Anders/Documents/abc.gif')
print(example_path.stem)
# 输出如下:
# abc

# 返回目录中最后一个部分的文件名
example_path = Path('/Users/Anders/Documents/abc.gif')
print(example_path.name)
# 输出如下:
# abc.gif

# 替换目录最后一个部分的文件名并返回一个新的路径
new_path1 = example_path.with_name('def.gif')
print(new_path1)
# 输出如下:
# /Users/Anders/Documents/def.gif

# 替换目录最后一个部分的文件名并返回一个新的路径
new_path2 = example_path.with_suffix('.txt')
print(new_path2)
# 输出如下:
# /Users/Anders/Documents/abc.txt
路径拼接和分解
from pathlib2 import Path

#直接传进一个完整字符串
example_path1 = Path('/Users/Anders/Documents/powershell-2.jpg')

#也可以传进多个字符串
example_path2 = Path('/', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')

#也可以利用Path.joinpath()
example_path3 = Path('/Users/Anders/Documents/').joinpath('python_learn')

# #利用 / 可以创建子路径
example_path4 = Path('/Users/Anders/Documents')
example_path5 = example_path4 / 'python_learn/pic-2.jpg'
遍历文件夹

我们可以在路径对象后面直接使用**iterdir()**方法,该方法返回一个生成器,我们可以循环遍历出所有指定目录下的目录路径。

from pathlib2 import Path

# 返回目录中最后一个部分的扩展名
example_path = Path('/Users/Anders/Documents')
[path for path in example_path.iterdir()]

# 输出如下:
# [PosixPath('/Users/Anders/Documents/abc.jpg'),
#  PosixPath('/Users/Anders/Documents/book-master'),
#  PosixPath('/Users/Anders/Documents/Database'),
#  PosixPath('/Users/Anders/Documents/Git'),
#  PosixPath('/Users/Anders/Documents/AppProjects')]
文件操作

文件操作是使用率非常高的操作,在pathlib里如果要打开一个文件也十分的简单,只需要open方法就可以,它的操作语法是:open(mode=‘r’, bufferiong=-1, encoding=None, errors=None, newline=None)

from pathlib2 import Path

example_path = Path('/Users/Anders/Documents/information/JH.txt')

with example_path.open(encoding = 'GB2312') as f:
    print(f.read())

对于简单的文件读写,在pathlib库中有几个简便的方法:

  • .read_text(): 以文本模式打开路径并并以字符串形式返回内容。
  • .read_bytes(): 以二进制/字节模式打开路径并以字节串的形式返回内容。
  • .write_text(): 打开路径并向其写入字符串数据。
  • .write_bytes(): 以二进制/字节模式打开路径并向其写入数据。

比如可以把之前的例子改写如下:

from pathlib2 import Path

example_path = Path('/Users/Anders/Documents/information/JH.txt')
example_path.read_text(encoding='GB2312')
创建文件夹和删除文件夹

关于这里的创建文件目录mkdir方法接收两个参数:

  • parents:如果父目录不存在,是否创建父目录。
  • exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常。
from pathlib2 import Path

example_path = Path('/Users/Anders/Documents/test1/test2/test3')

# 创建文件目录,在这个例子中因为本身不存在test1,test2,test3,由于parents为True,所以都会被创建出来。
example_path.mkdir(parents = True, exist_ok = True)
# 删除路径对象目录,如果要删除的文件夹内包含文件就会报错
example_path.rmdir()
判断文件及文件夹对象是否存在

关于文件的判断还有很多相关属性,罗列如下:

  • is_dir() 是否是目录

  • is_file() 是否是普通文件

  • is_symlink() 是否是软链接

  • is_socket() 是否是socket文件

  • is_block_device() 是否是块设备

  • is_char_device() 是否是字符设备

  • is_absolute() 是否是绝对路径

  • resolve() 返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软链接则直接被解析

  • absolute() 也可以获取绝对路径,但是推荐resolve()

  • exists() 该路径是否指向现有的目录或文件:

部分例子可以参照下面:

from pathlib2 import Path

example_path = Path('/Users/Anders/Documents/pic-2.jpg')

# 判断对象是否存在
print(example_path.exists())
# 输出如下:
# True

# 判断对象是否是目录
print(example_path.is_dir())
# 输出如下:
# False

# 判断对象是否是文件
print(example_path.is_file())
# 输出如下:
# True

文件的信息

只需要通过**.stat()**方法就可以返还指定路径的文件信息。

from pathlib2 import Path

example_path = Path('/Users/Anders/Documents/pic.jpg')
print(example_path.stat())
# 输出如下:
# os.stat_result(st_mode=33188, st_ino=8598206944, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=38054, st_atime=1549547190, st_mtime=1521009880, st_ctime=1521009883)

print(example_path.stat().st_size)
# 输出如下:
# 38054

如上,已经基本列举了路径处理中常用的各类操作,其实pathlib的方便和强大远不止于此,具体信息可以参见官方文档:https://docs.python.org/3.4/library/pathlib.html

Python内置库之pathlib print(p.stat().st_atime) # 输出最后访问时间print(p.stat().st_mtime) # 输出最后修改时间print(p.stat().st_atime) # 输出文件系统最后访问时间print(p.stat().st_mtime) # 输出文件系统最后修改时间print(p.stat().st_atime) # 输出文件系统最后访问时间print(p.stat().st_mtime) # 输出文件系统最后修改时间。 阅读详情

相关推荐

新手必看:如何用R/qtl快速完成QTL定位分析(附实战代码)

本文为新手提供了使用R/qtl进行QTL定位分析的完整实战指南。内容涵盖从环境搭建、数据准备与清洗,到核心分析流程(包括遗传图谱计算、单QTL扫描、置换检验确定阈值)以及进阶结果可视化的全步骤。通过清晰的代码示例,帮助读者快速掌握这一数量遗传学关键分析技术,实现从数据到QTL峰值的完整分析闭环。

y7z8a的博客 498

Python文件路径处理之pathlib模块

pathlib模块为Python中的路径操作提供了一个更加现代和面向对象的API。通过使用Path对象的方法和属性,可以轻松地执行各种路径操作,使得代码更加清晰和易于理解。无论是读取文件、遍历目录还是执行文件操作,pathlib都是一个非常强大且方便的工具。

专注于Python编程技术的分享与交流,致力于帮助开发者提升编程技能,解决实际问题,探索Python的无限可能。 5356

彻底清理Easy Connect残留:从服务到驱动的完整卸载指南

在企业网络接入场景中,远程客户端常因内核驱动、系统服务和网络过滤组件导致卸载残留,进程无法结束、文件被锁定、注册表项顽固存在。其原理在于驱动挂载网络协议栈,服务守护进程,卸载时资源占用导致清理不彻底。彻底清理的技术价值在于恢复系统纯净、避免网络异常和软件冲突。典型应用场景包括企业办公机、个人笔记本更换或重装客户端。本文针对深信服Easy Connect,提供从停止服务、删除驱动到清理注册表和虚拟网卡的分步操作链路,并给出验证方法和避坑经验。

weixin_31292729的博客 234

Python内置库:pathlib模块详解

Pathlib模块提供了表示文件系统路径的类,其语义适用于不同的操作系统。路径类分为纯路径和具体路径,前者提供无I/O的纯计算操作,后者继承纯路径,但也提供I/O操作。

Saki_Python的博客 2037

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2851

C++游戏开发实战:从零构建局域网联机对战系统(附完整代码解析)

本文详细介绍了如何使用C++开发局域网联机对战游戏系统,涵盖从环境搭建到实战代码解析的全过程。重点讲解了Winsock库的应用、Socket通信原理、服务端与客户端开发技巧,以及性能优化和安全防护方案,帮助开发者快速掌握C++游戏开发的核心技术。

weixin_42524945的博客 444

Python中的pathlib和Path(面向对象的文件系统路径操作库)

一种内置的面向对象的文件系统路径操作库,本篇文章介绍了Path中的常见的属性和方法,并给出了代码示例。

Le0v1n 的博客 7171

AutoSAR系列讲解 - 总目录

博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上

雪云飞星的博客 49万+

Python路径处理库pathlib

pathlib.PurePath 分割路径 parts 驱动器 drive 根目录 root 自动判断驱动器或根目录 anchor 所有上级目录列表 parents 父目录 parent 完整文件名 name 文件后缀 suffix 文件后缀列表 suffixes 文件名 stem Unix 路径分隔符表示 as_posix() 文件 URI 表示 as_uri() 判断绝对路径 is_ab...

流年浅滩 1万+

实战!C#整合YOLO+Halcon做玻璃瓶口缺陷检测:裂纹识别+尺寸测量一步到位(附DLL交互代码)

AI擅长语义识别(裂纹、缺陷),传统机器视觉擅长精密测量(尺寸、位置),C#做整合层,才能满足工业生产的“精度+效率+稳定性”要求。这套方案不只是玻璃瓶检测能用,改改模型和测量逻辑,还能用到瓶盖缺陷检测、饮料瓶液位检测等场景。如果你们厂也有类似的质检痛点,评论区留个言,我帮你看看怎么调整算法参数。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 868

PCL点云八叉树体素中心下采样,体素包含点索引提取

基于PCL octree实现点云八叉树计算,支持提取体素中心点进行点云下采样;根据任一点坐标,可以得到其在八叉树中的位置,输出对应体素内其余点的坐标或者索引

qq_48694523的博客 462

告别os.path:深入探索现代 Python 文件路径处理库pathlib

pathlib。

柷敔的博客 1338

CQE和SQE 以及 PQA和DQA的区别

‌:PQA聚焦产品全生命周期流程管理,DQA专注于设计阶段的质量控制。

a1809032425的博客 1902

当前完整路径_Pytorch 73.Python丝滑的路径处理库pathlib模块

使用 Python 操作文件路径,之前常用的做法是os.path。在 Python 3.4 之前和路径相关操作函数都放在 os 模块里面,尤其是os.path这个子模块,可以说os.path模块非常常用。而在 Python 3.4,标准库添加了新的模块 - pathlib,它使用面向对象的编程方式来表示文件系统路径。科技猛兽:PyTorch 66.Python中的os.path 与sys.path...

weixin_29211309的博客 453

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python文件路径处理库,from pathlib import Path

Path.mkdir(mode, parents, exist_ok) #创建目录,想整个路径一起创建,就设置parents为True, 想要覆盖创建,就设置exist_ok为True。create_time = datetime.datetime.fromtimestamp(path.stat().st_ctime) #转换成日期格式。换成'w'就是以写模式打开文件。path.glob("**/*.py") #返回该目录下的所有.py文件。path.stat().st_mtime #上次修改文件时间。

vb112479 664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【pathlib】

本文用来mark一些写的不错的技术博客方便快速查阅各种库的介绍 路径处理库pathlib使用详解

weixin_44493291的博客 98

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【python库对比】路径专题 os.path和pathlib对比

python 路径处理 高频使用库 os.path 和 pathlib 对比 以及代码示例,并在最后提供了2个库高频使用的接口示例

m0_74536743的博客 2293

文件系统绝对路径详解与跨平台处理技巧

文件路径是操作系统管理资源的核心标识机制,分为绝对路径和相对路径两种形式。绝对路径通过从根目录开始的完整定位方式,确保了文件访问的确定性,这种特性使其在程序开发、系统管理和数据库配置等场景中具有关键作用。从技术实现看,Windows系统采用盘符加反斜杠的分隔方式,而Linux/Unix系统使用正斜杠从根目录开始。现代编程语言如Python的pathlib模块和os.path工具包提供了跨平台路径处理能力,能有效解决路径分隔符转换、长度限制等工程实践问题。掌握绝对路径的规范化处理和符号链接解析技巧,对开发稳定

weixin_32667955的博客 352

Python文件操作终极指南:os.path、pathlib与shutil实战

文件读写与路径管理是编程中最基础也最高频的操作场景,无论是编写自动化脚本、构建后端服务还是开展数据处理,都会涉及目录遍历、文件复制和路径拼接等需求。Python标准库为此提供了三层递进工具:面向字符串的os.path、面向对象的pathlib以及面向文件级高级操作的shutil。理解它们各自的定位差异和协同方式,是写出简洁、健壮且跨平台代码的关键。从路径的智能拼接、目录递归扫描、批量重命名,到文件的复制移动、安全删除与归档压缩,合理组合这三个库能大幅提升日常编码效率。本文结合多年工程实践,梳理了这些模块的典

weixin_31102231的博客 236

跨平台文件路径处理:‘/‘与‘\‘的兼容性实践指南

本文深入探讨了跨平台开发中文件路径分隔符'/'与'\'的兼容性问题。通过分析历史成因与系统差异,重点推荐使用Python的pathlib和C++的std::filesystem等现代库进行路径处理,避免手动拼接字符串,从而编写出健壮、可移植的代码,彻底解决因路径差异导致的'文件找不到'等常见错误。

rgv234567的博客 363

Python3 新特性

原文链接: Python3 新特性 上一篇: ...

阿豪 136

python 入门

Python程序是大小写敏感的! 以#开头的语句是注释,每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。 数学运算 a的N次方例如2**4表示2*2*2*2 10的N次方,可以写成eN, 例如 1.23x109就是1.23e9 10//3 表示10除以3取整(去掉小数), 如果要四舍六入五成双,则用round(). 如果要进1, 则要先import ma...

dengshumi7891的博客 249
上一篇: 匿名函数lambda
下一篇: 在matplotlib中创建子图的多种方式
itanders
博客等级 码龄19年 178粉丝 177原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值