比文件操作os库更优异的标准库pathlib

pathlib 库从 python3.4 开始作为内置库,到 python3.6 已经比较成熟。相比于老式的 os.path 有几个优势:
- 老的路径操作函数管理比较混乱,有的是导入 os, 有的又是在 os.path 当中,而新的用法统一可以用 pathlib 管理。
- 老用法在处理不同操作系统 win,mac 以及 linux 之间很吃力。换了操作系统常常要改代码,还经常需要进行一些额外操作。
- 老用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。
- pathlib 简化了很多操作,用起来更轻松。
例如:
os 中获取文件的绝对路径:os.join(os.getcwd(), file_name)
pathlib中获取文件的绝对路径:pathilb.Path().resolve()
os 中获取上一级目录:os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
pathlib中获取上一级目录:pathilb.Path().parents
此外还有一个写法的优势,我们可以看到os的写法是函数式的,由内到外需要一层一层剥开,而pathlib是链式写法,从左到右理解,相较于从内到外理解更加清晰。
生成路径
根据路径生成对象
from pathlib import Path
path = Path('/home/ljk')
>>> path
PosixPath('/home/ljk')
获取当前路径
>>> path = Path.cwd()
>>> path
PosixPath('/home/ljk')
路径拼接
>>> new_path = path / "Desktop"
>>> new_path
PosixPath('/home/ljk/Desktop')
路径自身判断
path = Path('/home/ljk')
判断当前路径是否存在,即当前路径是文件或目录
>>> path.exists()
True
判断当前路径是否为文件夹
>>> path.is_dir()
True
判断当前路径是否为文件
>>> path.is_file()
False
判断路径是否为绝对路径
>>> path.is_absolute()
True
判断路径是否满足正则表达
path.match(pattern)
列出路径下文件
path = Path('/home/ljk')
获取路径下的所有符合filename的文件,返回一个generator
>>> files = path.glob("*.py")
>>> files
<generator object Path.glob at 0x7f0b673fae58>
获取路径下包括所有子文件夹的的所有符合filename的文件,返回一个generator
>>> files = path.rglob("*.py")
>>> files
<generator object Path.rglob at 0x7f0b673fade0>
当path为文件夹时,通过yield产生path文件夹下的所有文件、文件夹路径的迭代器
>>> path.iterdir()
<generator object Path.iterdir at 0x7f0b673fad68>
>>> files = path.iterdir()
>>> for file in files:
... print(file)
...
/home/ljk/.gtkrc-2.0
/home/ljk/.python_history-22040.tmp
/home/ljk/.gphoto
/home/ljk/.gitconfig
路径属性
path = Path('/home/ljk/a.txt')
获取文件的名字
>>> path.name
'a.txt'
获取文件名,不带后缀
>>> path.stem
'a'
获取文件的后缀
>>> path.suffix
'.txt'
获取文件的上级目录
>>> path.parent
PosixPath('/home/ljk')
获取所有上级目录
>>> parents = path.parents
>>> parents[0]
PosixPath('/home/ljk')
>>> parents[1]
PosixPath('/home')
获取文件的根目录
>>> path.root
'/'
将路径分割成元祖
>>> path.parts
('/', 'home', 'ljk', 'a.txt')
获取当前文件的信息
>>> path.stat()
os.stat_result(st_mode=33188, st_ino=5375436, st_dev=2051, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1638973232, st_mtime=1638973232, st_ctime=1638973232)
返回文件的绝对路径
>>> path.resolve()
PosixPath('/home/ljk/a.txt')
返回文件家目录
>>> path.home()
PosixPath('/home/ljk')
文件修改
当target是string时,重命名文件或文件夹;当target是Path时,重命名并移动文件或文件夹
path.rename(target)
重命名当前文件或文件夹,如果target所指示的文件或文件夹已存在,则覆盖原文件
path.replace(target)
path为空文件夹的时候,删除该文件夹
path.rmdir()
删除文件或目录,目录非空触发异常
path.unlink()
根据路径创建文件夹,parents=True时,会依次创建路径中间缺少的文件夹
path.mkdir(parents=True)
打开文件,底层调用open
path.open()
其他读写的操作
.read_text(): 找到对应的路径然后打开文件,读成str格式。等同open操作文件的"r"格式。
.read_bytes(): 读取字节流的方式。等同open操作文件的"rb"格式。
.write_text(): 文件的写的操作,等同open操作文件的"w"格式。
.write_bytes(): 文件的写的操作,等同open操作文件的"wb"格式。
官方文档

pathlib 官方文档:
https://docs.python.org/3/library/pathlib.html
比文件操作os库更优异的标准库pathlib的更多相关文章
- ca72a_c++_标准IO库:面向对象的标准库
/*ca72a_c++_标准IO库:面向对象的标准库继承:基类->派生类3个头文件9个标准库类型IO对象不可复制或赋值 ofstream, f--file,文件输出流ostringstream, ...
- python(3):文件操作/os库
文件基本操作 r,以读模式打开, r+=r+w, w, 写模式(清空原来的内容), w+=w+r, a , 追加模式, a+=a+r, rb, wb, ab, b表示以二进制文件打开 想在一段文 ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- python文件操作os模块
Python 统计某一文件夹下文件数量 使用python pathlib模块 from pathlib import Path dir_path = ' ' print(len(list(Path( ...
- Python中open()文件操作/OS目录操作
File对象测试数据的读写与操作 #def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- go语言之行--文件操作、命令行参数、序列化与反序列化详解
一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...
- Linux 文件操作总结
http://blog.163.com/he_junwei/blog/static/19793764620152592737741/ ioctl?? lseek?? 文件是linux中的一个重要概念. ...
- c++标准库都有哪些文件
from:http://topic.csdn.net/u/20090201/16/3bd41b72-5694-474e-a68b-98b2f070e76b.html C++标准库的所有头文件都没有扩展 ...
- golang文件操作
一.读写文件 1.读文件操作 os.File 封装所有文件相关操作 例子: package main import ( "fmt" "os" "io/ ...
随机推荐
- 从 SQL 查询优化技巧去看 h2 数据库查询原理
本文目标是:了解查询的核心原理,对比 SQL 查询优化技巧在 h2database 中的落地实现. 前提:为了贴近实际应用,本文 Code Insight 基于 BTree 存储引擎. 数据查询核心原 ...
- Soc的Bring Up流程
1.Bring Up流程 SOC (System on a Chip) bring-up是一个复杂的过程,涉及到硬件.固件和软件的集成和验证,以下是一个基于BROM,SPL,UBOOT和Linux的启 ...
- 记一次 .NET 某券商论坛系统 卡死分析
一:背景 1. 讲故事 前几个月有位朋友找到我,说他们的的web程序没有响应了,而且监控发现线程数特别高,内存也特别大,让我帮忙看一下怎么回事,现在回过头来几经波折,回味价值太浓了. 二:程序到底经历 ...
- L2-038 病毒溯源
#include <bits/stdc++.h> using namespace std; const int N = 10010; vector<int> g[N]; boo ...
- 集合-Nim游戏
与普通\(NIM\)游戏不同的地方是限制了每次拿东西的个数,这个个数会给定在集合\(S\)中,也就是说每次拿的数量只能在集合\(S\)中. 现在就可以把每一堆石子看成是一个有向图了,最主要就是用记忆化 ...
- 解决Vscode中代码格式化时老换行
问题: 小颖用vscode的格式化代码后发现代码老是换行,有时看起来就很难受,比如下面的: 问度娘后终于弄好啦,记录下,省的以后换电脑了重装了vscode又不会了,主要是百度给的解决方法好几个,但有的 ...
- 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)
接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面 首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那么这些都有什么含 ...
- Pycharm 2022 取消双击 shift 搜索框
Pycharm取消双击shift搜索框 基于PyCharm 2022.3.2 (Professional Edition),旧版本修改方式自行搜索 双击shift弹出搜索框,输入内容double mo ...
- Enterprise Architect去掉元素背景渐变效果
打开设置界面:TOOLS - Options 修改Gradients and Background的Gradient Fill Direction for属性为none即可
- Java核心知识体系8:Java如何保证线程安全性
Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 J ...