文件路径模块pathlib
文件路径模块pathlib
文章目录
- 文件路径模块pathlib
- 1.概述
- 2.创建路径
- 2.1.创建非windos平台路径
- 2.2.动态拼接路径joinpath
- 2.3.替换文件名称 with_name
- 2.4.创建固定目录
- 2.5.创建文件夹和文件
- 1.创建多级目录mkdir
- 2.创建空文件
- 3.路径解析
- 3.1.根据路径分隔符解析路径parts
- 3.2.获取父级目录parent
- 3.3.获取路径最后一个部分name
- 4.目录内容
- 4.1.访问路径下所有文件iterdir
- 4.2.正则匹配文件glob
- 5.读写文件
- 6.文件类型
- 7.文件属性
- 7.1.stat获取文件属性
- 7.2.stat判断文件属性方法
- 8.权限
- 9.删除
- 9.1.删除空目录
- 9.2.删除目录文件
1.概述
前面介绍的os.path模块操作文件路径是基于字符串的底层操作,这篇文章介绍的pathlib模块也是处理文件路径,但是它比os.path模块操作更加方便。
pathlib模块提供了一个面向对象API接口来 解析、创建、测试和处理文件和路径。
2.创建路径
2.1.创建非windos平台路径
PurePath
:代表并不访问实际文件系统的“纯路径”,只负责对路径字符串执行操作,不会在磁盘上创建路径及文件。PurePath有两个子类,即PurePosixPath和PathWindowsPath,分别代表UNIX风格的路径和Windows风格的路径。
Path
:代表访问实际文件系统的“真正路径”。Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即PosixPath和WindowsPath。
import pathlib# PurePosixPath非windows平台,创建一个路径对象
usr = pathlib.PurePosixPath('/usr')
print(usr)# 拼接路径
usr_local = usr / 'local'
print(usr_local)usr_share = usr / pathlib.PurePosixPath('share')
print(usr_share)root = usr / '..'
print(root)etc = root / '/etc/'
print(etc)
运行结果
/usr
/usr/local
/usr/share
/usr/..
/etc
2.2.动态拼接路径joinpath
如果创建的路径是未知的,可以将各个路径作为参数使用joinpath拼接。
import pathlibroot = pathlib.PurePosixPath('/')
subdirs = ['usr', 'local']
usr_local = root.joinpath(*subdirs)
print(usr_local)
运行结果
/usr/local
2.3.替换文件名称 with_name
当给定一个包含文件的路径时,我们想替换这个路径的文件名称,如果使用分隔符操作虽然可以获取到文件名称进行替换,但是操作有些复杂,这里提供了一个函数能够直接替换文件名称,他们都是返回新对象,原对象保持不变。
- with_name函数用来替换路径中文件名
- with_suffix函数修改文件后缀
import pathlibind = pathlib.PurePosixPath('source/pathlib/index.rst')
print(ind)
# 替换文件名称
py = ind.with_name('pathlib_from_existing.py')
print(py)# 替换文件后缀
pyc = py.with_suffix('.pyc')
print(pyc)
运行结果
source/pathlib/index.rst
source/pathlib/pathlib_from_existing.py
source/pathlib/pathlib_from_existing.pyc
2.4.创建固定目录
当我们创建目录时候可以指定一个固定目录,然后在目录后拼接路径。省去了每次都要写一个绝对路径,path类为我们提供了常用的方法,例如home方法获取当前系统的家目录,cwd方法获取当前工作目录。
import pathlibhome = pathlib.Path.home()
print('home: ', home)cwd = pathlib.Path.cwd()
print('cwd : ', cwd)
运行结果
home: /Users/edy
cwd : /Users/edy/my_pathlib
2.5.创建文件夹和文件
1.创建多级目录mkdir
mkdir方法可以用来创建多级目录
- parents = True: 创建中间级父目录
- exist_ok= True: 目标目录存在时不报错
import pathlibp = pathlib.PurePosixPath('dir/abd')
pathlib.Path(p).mkdir(parents=True, exist_ok=True)
print(p)
2.创建空文件
touch方法用来创建一个空文件,前提是文件创建的路径必须存在,路径不存在则会报错。
from pathlib import Pathmyfile = Path('dir/myfile.txt')
myfile.touch(exist_ok=True)
3.路径解析
3.1.根据路径分隔符解析路径parts
parts属性可以生成根据路径分隔符解析得到的一个路径段序列,返回是一个元组,反应了路径实例的不可变性。
import pathlibp = pathlib.PurePosixPath('/usr/local/lib')
print(p.parts)
运行结果
('/', 'usr', 'local', 'lib')
3.2.获取父级目录parent
获取父级目录有两个属性
parent属性获取一次path路径的父级路径
parents属性返回一个迭代器,他可以不断的获取上级目录,直到文件系统的根目录。
import pathlibp = pathlib.PurePosixPath('/usr/local/lib')
# 获取父级目录
print('parent: {}'.format(p.parent))print('\nhierarchy:')
# 迭代获取父级目录直到系统文件根路径
for up in p.parents:print(up)
运行结果
parent: /usr/localhierarchy:
/usr/local
/usr
/
3.3.获取路径最后一个部分name
name属性获取路径的最后一个部分与os.path.basename函数生成的值相同。
suffix属性获取文件扩展名
stem属性获取不含后缀的文件名
import pathlibp = pathlib.PurePosixPath('./source/pathlib/pathlib_name.py')
print('path : {}'.format(p))
# 获取文件名称
print('name : {}'.format(p.name))
# 获取文件后缀
print('suffix: {}'.format(p.suffix))
# 获取文件名称不包含后缀
print('stem : {}'.format(p.stem))
运行结果
path : source/pathlib/pathlib_name.py
name : pathlib_name.py
suffix: .py
stem : pathlib_name
4.目录内容
path类提供了一些方法用来访问目录列表和发现文件系统中的文件名。
4.1.访问路径下所有文件iterdir
iterdir方法是一个生成器,会返回指定目录中所有内容。如果path不指定一个目录,则iterdir() 抛出 NotADirectoryError
import pathlibp = pathlib.Path('.')# 返回指定路径下所有的文件
for f in p.iterdir():print(f)
4.2.正则匹配文件glob
glob方法根据正则表达式匹配符合条件的文件
import pathlibp = pathlib.Path('.')# 匹配当前路径下my开头,py后缀的文件
for f in p.glob('my_*.py'):print(f)
运行结果
my_parsing_path.py
my_dir_path.py
rglob方法可以递归遍历文件
import pathlibp = pathlib.Path('..')for f in p.rglob('pathlib_*.py'):print(f)
5.读写文件
Path实例包含一些方法读写文件内容,例如read_bytes() or read_text()读取文件内容, use write_bytes() or write_text()写入文件。可以使用open方法打开文件并保留句柄操作文件。
import pathlib# 当前路径下创建文件
f = pathlib.Path('example.txt')f.write_bytes('This is the content'.encode('utf-8'))with f.open('r', encoding='utf-8') as handle:print('read from open(): {!r}'.format(handle.read()))print('read_text(): {!r}'.format(f.read_text('utf-8')))
运行结果
read from open(): 'This is the content'
read_text(): 'This is the content'
6.文件类型
Path类包含了一些方法判断文件的类型。
- is_file()判断是不是文件类型
- is_dir()判断是不是目录类型
- is_symlink()判断是不是软链接类型
- is_fifo()判断是不是队列
- is_block_device()判断是不是块设备
- is_char_device()判断是不是字符设备
7.文件属性
7.1.stat获取文件属性
stat()方法和lstat()方法获取文件属性,lstat方法用来检查可能是软连接的目标状态。这两个方法返回的结果与os.stat和os.lstat方法相同。
import pathlib
import sys
import timeif len(sys.argv) == 1:filename = __file__
else:filename = sys.argv[1]p = pathlib.Path(filename)
stat_info = p.stat()# 文件的绝对路径
print('{}:'.format(filename))
# 文件大小
print(' Size:', stat_info.st_size)
# 文件权限
print(' Permissions:', oct(stat_info.st_mode))
# 文件所有者
print(' Owner:', stat_info.st_uid)
# 文件所在块设备
print(' Device:', stat_info.st_dev)
# 文件创建时间
print(' Created :', time.ctime(stat_info.st_ctime))
# 文件最后修改时间
print(' Last modified:', time.ctime(stat_info.st_mtime))
# 文件最后方法时间
print(' Last accessed:', time.ctime(stat_info.st_atime))
运行结果
/Users/edy/file_propert.py:Size: 632Permissions: 0o100644Owner: 501Device: 16777220Created : Mon Feb 13 17:26:24 2023Last modified: Mon Feb 13 17:26:24 2023Last accessed: Mon Feb 13 17:26:24 2023
owner()和group()单独获取文件所有者个分组信息
import pathlibp = pathlib.Path(__file__)print('{} is owned by {}/{}'.format(p, p.owner(), p.group()))
运行结果
/Users/edy/file_propert.py is owned by edy/staff
7.2.stat判断文件属性方法
import os
import pathlib
import statroot = pathlib.Path('test_files')
mode = os.stat(root).st_mode
# 判断文件是否存在.
if root.exists():for f in root.iterdir():f.unlink()
else:root.mkdir()if stat.S_ISREG(mode): # 判断是否一般文件print('Regular file.')
elif stat.S_ISLNK(mode): # 判断是否链接文件print('Shortcut.')
elif stat.S_ISSOCK(mode): # 判断是否套接字文件print('Socket.')
elif stat.S_ISFIFO(mode): # 判断是否命名管道print('Named pipe.')
elif stat.S_ISBLK(mode): # 判断是否块设备print('Block special device.')
elif stat.S_ISCHR(mode): # 判断是否字符设置print('Character special device.')elif stat.S_ISDIR(mode): # 判断是否目录print('directory.')##额外的两个函数
stat.S_IMODE(mode) # 返回文件权限的chmod格式
print('chmod format.')stat.S_IFMT(mode) # 返回文件的类型
print('type of fiel.')
8.权限
stat除了获取文件权限,还支持设置文件权限。 下面是设置文件权限的属性列表。
stat.S_ISUID: Set user ID on execution. 不常用
stat.S_ISGID: Set group ID on execution. 不常用
stat.S_ENFMT: Record locking enforced. 不常用
stat.S_ISVTX: Save text image after execution. 在执行之后保存文字和图片
stat.S_IREAD: Read by owner. 对于拥有者读的权限
stat.S_IWRITE: Write by owner. 对于拥有者写的权限
stat.S_IEXEC: Execute by owner. 对于拥有者执行的权限
stat.S_IRWXU: Read, write, and execute by owner. 对于拥有者读写执行的权限
stat.S_IRUSR: Read by owner. 对于拥有者读的权限
stat.S_IWUSR: Write by owner. 对于拥有者写的权限
stat.S_IXUSR: Execute by owner. 对于拥有者执行的权限
stat.S_IRWXG: Read, write, and execute by group. 对于同组的人读写执行的权限
stat.S_IRGRP: Read by group. 对于同组读的权限
stat.S_IWGRP: Write by group. 对于同组写的权限
stat.S_IXGRP: Execute by group. 对于同组执行的权限
stat.S_IRWXO: Read, write, and execute by others. 对于其他组读写执行的权限
stat.S_IROTH: Read by others. 对于其他组读的权限
stat.S_IWOTH: Write by others. 对于其他组写的权限
stat.S_IXOTH: Execute by others. 对于其他组执行的权限
下面通过一个例子演示为文件设置权限
import stat
import pathlib
f = pathlib.Path('pathlib_chmod_example.txt')
if f.exists():f.unlink()
f.write_text('contents')
# stat.S_IMODE转为chmod模式,参数是获取当前文件的权限
existing_permissions = stat.S_IMODE(f.stat().st_mode)
print('文件原始权限: {:o}'.format(existing_permissions))new_permissions = stat.S_IRUSR
# 设置文件新的权限
f.chmod(new_permissions)
# 转换成chmod模式输出
after_permissions = stat.S_IMODE(f.stat().st_mode)
print('After: {:o}'.format(after_permissions))
运行结果
文件原始权限: 644
修改后的权限: 400
9.删除
9.1.删除空目录
删除一个空目录可以使用rmdir,如果删除一个不为空的目录会报错。删除的目录不存在也会报错。
import pathlibp = pathlib.Path('example_dir')print('Removing {}'.format(p))
p.rmdir()
9.2.删除目录文件
对于文件、符号链接、路径,可以使用unlink()删除
import pathlibp = pathlib.Path('touched')p.touch()print('exists before removing:', p.exists())p.unlink()
运行结果
exists before removing: True
exists after removing: False
相关文章:
文件路径模块pathlib
文件路径模块pathlib 文章目录文件路径模块pathlib1.概述2.创建路径2.1.创建非windos平台路径2.2.动态拼接路径joinpath2.3.替换文件名称 with_name2.4.创建固定目录2.5.创建文件夹和文件1.创建多级目录mkdir2.创建空文件3.路径解析3.1.根据路径分隔符解析路径parts3.2.获取父级…...

spring cloud篇——什么是服务熔断?服务降级?服务限流?spring cloud有什么优势?
文章目录一、spring cloud 有什么优势二、服务熔断2.1、雪崩效应2.2、DubboHystrixCommand三、服务降级四、服务限流4.1、限流算法4.2、应用级限流4.3、池化技术4.4、分布式限流4.5、基于Redis 功能的实现限流4.6、基于令牌桶算法的实现4.6.1 、Java实现一、spring cloud 有什么…...

Tomcat构建
软件架构C/S:Client/Server.需要安装才能使用。B/S:Brower/Server。有浏览器就可以。资源分类动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解…...

入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)
入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现) 一、网络构建 1.1 问题导入 如图所示,数字五的图片作为输入,layer01层为输入层,layer02层为隐藏层,找出每列最大值对应索引为输…...

预算砍砍砍,IT运维如何降本增效
疫情短暂过去,一个乐观的共识正在蔓延:2023年的互联网,绝对不会比2022年更差。 “降本”是过去一年许多公司的核心策略,营销大幅缩水、亏损业务大量撤裁,以及层出不穷的裁员消息。而2023年在可预期的经济复苏下&#…...

10.Jenkins用tags的方式自动发布java应用
Jenkins用tags的方式自动发布java应用1.配置jenkins,告诉jenkins,jdk的安装目录,maven的安装目录2.构建一个maven项目指定构建参数,选择Git Paramete在源码管理中,填写我们git项目的地址,调用变量构建前执行…...
2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)
相同数字的积木游戏 1 题目 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的 2 块积木块,计算他们的距离。 小薇请你帮忙替她…...

重构之改善既有代码的设计(一)
1.1 何为重构,为何重构 第一个定义是名词形式: 重构(名词):对软件内部结构的一种调整,目的是在不改变「软件可察行为」前提下,提高其可理解性,降低修改成本。 「重构」的另一个用…...
Kotlin data class 数据类用法
实验数据 {"code":1,"message":"成功","data":{"name":"周杰轮","gender":1} }kotlin数据类使用方便提供如下内部Api: equals()/hashCode()对 toString() componentN()按声明顺序与属性相…...

随笔-老子不想牺牲了
18年来到这个项目组,当时只有8个人,包括经常不在的架构师和经理。当时的工位在西区1栋A座,办公桌很宽敞。随着项目的发展,入职的人越来越多,项目的工位也是几经搬迁。基本上每次搬迁时,我的工位都是挑剩下的…...

三种查找Windows10环境变量的方法
文章目录一.在设置中查看二. 在我的电脑中查看三. 在资源管理器里查看一.在设置中查看 在系统中搜索设置 打开设置,在设置功能里,点击第一项 系统 在系统功能里,左侧菜单找到关于 在关于的相关设置里可以看到高级系统设置 点击高级系…...

STM32单片机DS18B20测温程序源代码
OLED液晶屏电路接口DS18B20电路接口STM32单片机DS18B20测温程序源代码#include "sys.h"#define LED_RED PBout(12)#define LED_GREEN PBout(13)#define LED_YELLOW PBout(14)#define LED_BLUE PBout(15)#define DS18B20_IO_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA…...

java日志查看工具finder介绍
目录 一、finder介绍 二、单节点部署 1、服务器需要安装Tomcat,以2.82.16.35为例 2、进入Tomcat下目录webapps下,创建FIND目录,进入FIDN目录 3、下载findweb插件,解压缩 4、登录页面,配置 5、添加日志路径 三、…...
手写现代前端框架diff算法-前端面试进阶
前言 在前端工程上,日益复杂的今天,性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优,当然与他的如何怎么实现的有关。比如key为什么不能使用index呢?为什么不使用随机数呢?答案当然…...

【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译
文章目录【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译摘要1. 简介2. 方法2.1 半监督框架概述2.2 监督局部对比学习2.3 下采样和块划分3. 实验4. 结论【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译 论文题目:Semi-supervised Contrastive Learning for Labe…...

vivo官网App模块化开发方案-ModularDevTool
作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。 说明:本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…...
Python基础-数据类型之数字类型
变量中的变量值是用来存储事物状态的,事物的状态分成不同的种类(例如:人的姓名、年龄,身高、职位、工资等),因此变量值有多种不同的数据类型。 age 18 # 用整型记录年龄 salary 3.1 # 用浮点型记录…...

基于Web的6个完美3D图形WebGL库
现代前端、游戏和Web开发正是WebGL可以转化为数字杰作的东西。使用GPU绘制在浏览器屏幕上生成的矢量元素,WebGL创建交互式Web图形,从而获得用户体验。视觉元素的质量和复杂性使该工具在HTML或CSS等其他方法中脱颖而出。WebGL基础WebGL不是一个图形套件。…...

界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI
DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…...

初学vector
目录 string的收尾 拷贝构造的现代写法: 浅拷贝: 拷贝构造的现代写法: swap函数: 内置类型有拷贝构造和赋值重载吗? 完善拷贝构造的现代写法: 赋值重载的现代写法: 更精简的现代写法&…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...