Python模块pathlib操作文件和目录操作总结

news2024/9/22 1:46:25

前言

目前大家常用的对于文件和操作的操作使用 os.path 较多,比如 获取当前路径os.getcwd(),判断文件路径是否存在os.path.exists(folder) 等等。

在Python3.4开始,官方提供了 pathlib 面向对象的文件系统路径,核心的点在于 面向对象, 这也是 os.pathpathlib的本质区别

推进使用 pathlib

为什么推进使用 pathlib 呢?

来看个对比演示

>>> import os
>>> import pathlib
>>> p1 = os.getcwd()
>>> p2 = pathlib.Path.cwd()
>>> print(p1, type(p1))
/data/colinspace/temp <class 'str'>
>>> print(p2, type(p2))
/data/colinspace/temp <class 'pathlib.PosixPath'>

看到区别在于 os 返回的是 字符串, 而 pathlib.Path 返回的是 , 这个类提供了很多有用的关于文件和文件夹的内置方法

>>> p2.
p2.absolute(         p2.home(             p2.joinpath(         p2.read_bytes(       p2.stem
p2.anchor            p2.is_absolute(      p2.lchmod(           p2.read_text(        p2.suffix
p2.as_posix(         p2.is_block_device(  p2.lstat(            p2.relative_to(      p2.suffixes
p2.as_uri(           p2.is_char_device(   p2.match(            p2.rename(           p2.symlink_to(
p2.chmod(            p2.is_dir(           p2.mkdir(            p2.replace(          p2.touch(
p2.cwd(              p2.is_fifo(          p2.name              p2.resolve(          p2.unlink(
p2.drive             p2.is_file(          p2.open(             p2.rglob(            p2.with_name(
p2.exists(           p2.is_reserved(      p2.owner(            p2.rmdir(            p2.with_suffix(
p2.expanduser(       p2.is_socket(        p2.parent            p2.root              p2.write_bytes(
p2.glob(             p2.is_symlink(       p2.parents           p2.samefile(         p2.write_text(
p2.group(            p2.iterdir(          p2.parts             p2.stat(

# 检查文件夹是否存在
>>> p2.exists()
True
# 判断是否是文件is_file/文件夹is_dir
>>> p2.is_dir()
True
# 返回父级目录
>>> p2.parent
PosixPath('/data/colinspace')

pathlib 优势举例演示

1、遍历文件夹更快,因为它返回的是 generator 生成器,节省内存

# 返回生成器
>>> p2.iterdir()
<generator object Path.iterdir at 0x7fa45e767780>

>>> list(p2.iterdir())
[PosixPath('/data/colinspace/temp/file.txt'), PosixPath('/data/colinspace/temp/redis-rdr'), PosixPath('/data/colinspace/temp/django_task'), PosixPath('/data/colinspace/temp/20210923'), PosixPath('/data/colinspace/temp/java-service-check.py')]

2、支持通配符,类似 find正则匹配查找特定类型的文件

>>> p2.glob("*.py")
<generator object Path.glob at 0x7fa45e767780>

>>> list(p2.glob("*.py"))
[PosixPath('/data/colinspace/temp/java-service-check.py'), PosixPath('/data/colinspace/temp/demo_paramiko.py'), PosixPath('/data/colinspace/temp/demo_consul.py'), ... ...]

3、高效的读写文件操作

>>> p3 = pathlib.Path('1207_test.txt')
# 文件不存在的时候,写入是会默认创建
>>> p3.write_text("Hello World\nHello Pathlib!")
26
>>> p3.read_text()
'Hello World\nHello Pathlib!'

# 也可以使用 with 进行读取
>>> with p3.open() as f:
...     f.readlines()
...
['Hello World\n', 'Hello Pathlib!']
  • Path.open(mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None) 打开文件,类似内置的open函数

  • Path.read_bytes() 按照二进制模式读取

  • Path.write_bytes(data) 将文件以二进制模式打开,写入 data 并关闭;一个同名的现存文件将被覆盖。

  • Path.write_text(data, encoding=None, errors=None, newline=None)

将文件以文本模式打开,写入 data 并关闭;同名的现有文件会被覆盖。 可选形参的含义与 open() 的相同。

  • Path.read_text() 按照文件字符串模式读取

其他的方法可以参考官方文档 https://docs.python.org/zh-cn/3/library/pathlib.html

Pathlib的特殊性

pathlib同步的考虑了 Windows 路径的特性,提供了带 I/O 操作的和不带 I/O 操作的类,官方定义叫做 具体路径(带I/O)和纯路径(不带I/O)

pathlib-inheritance

只想操作路径但不想实际访问操作系统,实例化一个纯路径是必须的。比如在Linux设备上操作Windows路径,那么应该实例化一个 PureWindowsPath 而不是 WindowsPath

os.path 和 pathlib 相同函数对应表

os/os.pathpathlib
os.path.abspath()Path.absolute()
os.path.realpath()Path.resolve()
os.chmod()Path.chmod()
os.mkdir()Path.mkdir()
os.makedirs()Path.mkdir()
os.rename()Path.rename()
os.replace()Path.replace()
os.rmdir()Path.rmdir()
os.remove(), os.unlink()Path.unlink()
os.getcwd()Path.cwd()
os.path.exists()Path.exists()
os.path.expanduser()Path.expanduser() 和 Path.home()
os.listdir()Path.iterdir()
os.path.isdir()Path.is_dir()
os.path.isfile()Path.is_file()
os.path.islink()Path.is_symlink()
os.link()Path.hardlink_to()
os.symlink()Path.symlink_to()
os.readlink()Path.readlink()
os.path.relpath()PurePath.relative_to()
os.stat()Path.stat(), Path.owner(), Path.group()
os.path.isabs()PurePath.is_absolute()
os.path.join()PurePath.joinpath()
os.path.basename()PurePath.name
os.path.dirname()PurePath.parent
os.path.samefile()Path.samefile()
os.path.splitext()PurePath.stem and PurePath.suffix

原文链接 Python模块pathlib操作文件和目录操作总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatGPT代码写的有点好啊,程序员要失业了?

AI神器ChatGPT 火了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住&#xff0c;它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏&#xff1a;先用ChatGPT生成游戏设定&#xff0c;再用Midjourney出图&…

element-plus elplus el-tree三种图标自定义 并且点击图标展开收起 点击文字获取数据

前言 公司需求,需要实现如下样式的树形列表 (基于vue3 element-plus) 当节点展开时,显示展开的文件夹图标,当节点收起时显示收起的文件夹,最后一级显示文件样式 废话没有了, 代码如下 <!-- 树形列表组件 --> <template><div class"tree-input" v-i…

Vue学习:回顾Object.defineProperty(给对象添加或者定义属性的)

<script>//定义对象let person{name:李四,sex:"男"}Object.defineProperty(person,age,{value:18});//参数:添加属性的对象 添加的属性名 配置项console.log(person)</script> 颜色不同&#xff1a;说明了age不可以枚举age属性不参与遍历 Object.keys(…

电脑屏幕录制怎么弄?电脑上怎么录制屏幕, 3个实用方法

对于日常办公的小伙伴来说&#xff0c;电脑、键盘、鼠标等办公设备都是不可分割的。事实上&#xff0c;不仅仅是在日常办公&#xff0c;在很多业余的活动中&#xff0c;也会使用到电脑设备。在使用电脑的时候&#xff0c;会经常有需要录制电脑屏幕的情况&#xff0c;比如记录会…

阿里云Linux热扩容云盘(growpart和resize2fs工具)

阿里云linux机器系统盘空间不够进行扩容 一、扩容物理盘 阿里云控制台在线扩容完成 二、安装growpart工具和resize2fs工具 [rootA ~]# yum install cloud-utils-growpart [rootA ~]# yum install xfsprogs 三、检查扩容磁盘属性 1、检查云盘大小 /dev/vda1显示容量为20G(在线…

Properties类的使用

Properties类是一个配置文件类&#xff0c;主要作用就是用来封装配置文件&#xff0c;将配置文件加载成为一个Properties对象。 注意&#xff1a;Properties类一般用来加载 .properties配置文件 首先看一下.properties配置文件的样子 driverClassNamecom.mysql.cj.jdbc.Drive…

电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)

目录 1 概述 2 电力系统潮流计算概述 2.1 电力潮流发展进程 2.2牛顿拉夫逊法潮流计算 3 仿真结果 4 Matlab代码及文章讲解 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 1 概述 最初&#xff0c;电力系统潮流计算是通过人工手算的。后…

Java内存区域与内存分配策略

java很聪明&#xff0c;它将手动改为自动&#xff0c;把内存的控制权交给了虚拟机&#xff0c;下面我们就来探究一下JVM是怎么进行自动内存管理的。 手动内存管理分为两部分&#xff1a;给对象分配内存和回收分配给对象的内存。 一、运行时数据区域 线程公有 在运行时数据区中…

基础入门 - SpringBoot 底层注解

目录 1、SpringBoot特点 1.1、依赖管理 1.2、自动配置 2、容器功能 2.1、组件添加 1、Configuration Spring Boot 在底层 Configuration 的两个配置 2、Import 3、Conditional 2.2、原生配置文件引入 1、ImportResource 2.3、配置绑定 1、ConfigurationProperties …

前端开发踩坑笔记(2022-11)

文章目录1、Mac上SourceTree更新已删除的远端分支和tag2、echarts x轴文字显示不全&#xff08;解决方案&#xff09;3、如何渲染多行多列的表格&#xff08;非固定的行数和列数&#xff09;4、umy-ui标题过长或内容过长时的处理5、dateRange的时间选择只能选择一个周6、如何将…

Servlet API 详解

目录 一、HttpServlet ① init() 方法 ② service() 方法 ③ destroy() 方法 ④ doGet()方法 ⑤ doPost()方法 ⑥ doPut/deDelete/doOptions 常见面试题&#xff1a; 请你谈谈Servlet的生命周期 二、Http请求&#xff1a;HttpServletRequest 1. 获取请求行信息 2. 获…

一个redux使用案例模板

目录 redux 纯函数和高阶函数&#xff1a; redux 开发工具使用 react-redux redux 1. 结构&#xff1a; count--index.jsx import React, { Component } from react import store from ../../redux/store import { acDecrement,acIncrement,acAsyncIncrement } from ../..…

不会向上管理的人,做不好项目经理和PMO【附具体行动清单】

在职场中&#xff0c;向上管理基本是最重要的一件事儿&#xff0c;升职涨薪奖金都离不开向上管理&#xff01;当你的向上管理做得好&#xff0c;机会都会迎面扑来。 你是不是也遇到过被领导批评时&#xff0c;感到非常委屈或愤怒&#xff0c;情绪经常被领导左右&#xff0c;那…

Three.js一学就会系列:02 画线

系列文章目录 Three.js一学就会系列&#xff1a;01 第一个3D网站 文章目录系列文章目录[Three.js一学就会系列&#xff1a;01 第一个3D网站](https://blog.csdn.net/u012551928/article/details/128205373)前言一、省略部分二、使用方法创建一个场景创建一个透视摄像机将渲染器…

详解CSS层叠上下文(解析z-index不生效的原因)

为什么会有层叠上下文 在CSS2.1规范中&#xff0c;每个盒模型的位置是三维的&#xff0c;分别是平面画布上的X轴&#xff0c;Y轴以及表示层叠的Z轴。一般情况下&#xff0c;元素在页面上沿X轴Y轴平铺&#xff0c;我们察觉不到它们在Z轴上的层叠关系。而一旦元素发生堆叠&#x…

查询网站的谷歌PR权重复杂吗?查询谷歌PR权重最简单的方法

查询网站的谷歌PR权重复杂吗&#xff1f;用对方法一点也不复杂哦! 查询谷歌PR权重最简单的方法——用网站批量查询工具。 网站批量查询工具根据网站的域名可以查询到网站的权重值、网站信息、域名信息、域名备案情况、域名是否安全&#xff0c;来作为网站数据分析的参考。 具体…

C语言基础7:结构体类型、声明、成员类型、定义、初始化、成员访问、传参

文章目录C语言基础7&#xff1a;结构体类型、声明、成员类型、定义、初始化、成员访问、传参1. 结构体类型的声明1.1 结构体的基础知识1.2 结构体的声明1.3 结构体成员的类型1.4 结构体变量的定义和初始化2. 结构体成员访问4. 结构体传参C语言基础7&#xff1a;结构体类型、声明…

SAP S4HANA MM模块后台配置详解

目录 1. 常规设置 1.1 定义国家 1.2.计量单位配置 1.3.货币设置 1.4.维护日历 1.4.1 概念及功能说明 1.4.2 业务示例 1.4.3 配置步骤 2. 企业结构 2.1 定义和分配公司 2.2 设定评估级别、定义/分配工厂 2.2.1. 概念及功能说明 2.2.1. 业务示例 2.2.2. 配置步…

java 八股文

java 八股文 java篇 java 面向对象有哪些特征 封装 多态和继承 arrayList 和 LinkedList 的区别 数据结构不同&#xff0c;一个是数组一个是链表 arrayList 适合 随机访问 读多&#xff0c;插入和删除少 LinkedList 适合插入 和删除 多&#xff0c;按次序遍历的情况 再…

数据结构实验-折半插入排序-双向冒泡排序

目录 分析&#xff1a; 折半插入排序 双向冒泡排序 折半插入排序 思想&#xff1a; 代码 运行结果 双向冒泡排序 代码 运行结果 分析&#xff1a; 折半插入排序 折半插入排序&#xff0c;折半插入排序是在直接插入的改进&#xff0c;通过折半查找得到插入位置&#xf…