pathlib 库从 python3.4 开始作为内置库,到 python3.6 已经比较成熟。相比于老式的 os.path 有几个优势:

  1. 老的路径操作函数管理比较混乱,有的是导入 os, 有的又是在 os.path 当中,而新的用法统一可以用 pathlib 管理。
  2. 老用法在处理不同操作系统 win,mac 以及 linux 之间很吃力。换了操作系统常常要改代码,还经常需要进行一些额外操作。
  3. 老用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。
  4. 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的更多相关文章

  1. ca72a_c++_标准IO库:面向对象的标准库

    /*ca72a_c++_标准IO库:面向对象的标准库继承:基类->派生类3个头文件9个标准库类型IO对象不可复制或赋值 ofstream, f--file,文件输出流ostringstream, ...

  2. python(3):文件操作/os库

      文件基本操作 r,以读模式打开,  r+=r+w, w, 写模式(清空原来的内容), w+=w+r, a , 追加模式, a+=a+r, rb, wb, ab, b表示以二进制文件打开 想在一段文 ...

  3. 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

    嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...

  4. python文件操作os模块

    Python 统计某一文件夹下文件数量 使用python  pathlib模块 from pathlib import Path dir_path = ' ' print(len(list(Path( ...

  5. Python中open()文件操作/OS目录操作

    File对象测试数据的读写与操作 #def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, ...

  6. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  7. go语言之行--文件操作、命令行参数、序列化与反序列化详解

    一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...

  8. Linux 文件操作总结

    http://blog.163.com/he_junwei/blog/static/19793764620152592737741/ ioctl?? lseek?? 文件是linux中的一个重要概念. ...

  9. c++标准库都有哪些文件

    from:http://topic.csdn.net/u/20090201/16/3bd41b72-5694-474e-a68b-98b2f070e76b.html C++标准库的所有头文件都没有扩展 ...

  10. golang文件操作

    一.读写文件 1.读文件操作 os.File 封装所有文件相关操作 例子: package main import ( "fmt" "os" "io/ ...

随机推荐

  1. python之object类

    object类 如python之继承及其实现方法这一节提到过的,object类是所有类的父类,因此所有类都有object类的属性和方法. 如python之封装及私有方法使用过的,内置函数dir()可以 ...

  2. 一篇文章带你掌握Web自动化测试工具——Selenium

    一篇文章带你掌握Web自动化测试工具--Selenium 在这篇文章中我们将会介绍Web自动化测试工具Selenium 如果我们需要学习相关内容,我们需要掌握Python,PyTest以及部分前端知识 ...

  3. 主界面(零基础适合小白)基础javaweb前端项目实战【包含增删改查,mysql】三

    首先编写sp文件(index.jsp) <%@ page contentType="text/html;charset=UTF-8" language="java& ...

  4. 这下对阿里java这几条规范有更深理解了

    背景 阿里java开发规范是阿里巴巴总结多年来的最佳编程实践,其中每一条规范都经过仔细打磨或踩坑而来,目的是为社区提供一份最佳编程规范,提升代码质量,减少bug. 这基本也是java业界都认可的开发规 ...

  5. 前端学习-html-1

    html常用标签 h1-h6:标题 p:段落 strong/em: 对文本进行设置    strong--加粗,强调作用  比如:商品价格    em--斜体,对文本内容修饰成斜体 hr/br: hr ...

  6. 使用 Guava Retry 优雅的实现重试机制

    王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 大家好,我是王有志.今天我会通过一个真实的项目改造案例和大家聊一聊如何优雅的实现 Java 中常用的的重 ...

  7. java监听全局组合键

    1. jintellitype pom <!-- 不能注册多个组合键比如alt+abc --> <!-- https://mvnrepository.com/artifact/com ...

  8. 带圆角的虚线边框?CSS 不在话下

    今天,我们来看这么一个非常常见的切图场景,我们需要一个带圆角的虚线边框,像是这样: 这个我们使用 CSS 还是可以轻松解决的,代码也很简单,核心代码: div { border-radius: 25p ...

  9. 开发期间flask运行方式(1.x和2.x区别)

    1.x使用app.run(参数) 可以使用debug=True控制处于什么模式. app.run(host="127.0.0.1", port=5000, debug=True) ...

  10. lca 学习笔记

    定义 最近公共祖先简称 \(LCA\) 两个节点的最近公共祖先,就是这两个点的公共祖先里,离根最远的的那个 为了方便,我们记某点集 \(S={v1,v2,...,vn}\) 的最近公共祖先为 \(LC ...