python中pathlib 面向对象的文件系统路径

 更新时间:2024年12月26日 10:58:29   作者:LKIDTI数据  
文章介绍了Python 3.4+内置的标准库pathlib,该库提供面向对象的文件系统路径处理,通过pathlib,可以更方便地进行路径操作,感兴趣的朋友一起看看吧

pathlib:面向对象的文件系统路径

pathlib官方介绍: Python3.4+内置的标准库,Object-oriented filesystem paths(面向对象的文件系统路径)

1. 使用示例

1.1 最常用:获取项目目录

os.path方法

import os
project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(project_dir)  # /Users/root/Code/project
print(type(project_dir))  # <class 'str'>

pathlib方法

from pathlib import Path
project_dir = Path(__file__).resolve().parent.parent
print(project_dir)  # /Users/root/Code/project
print(type(project_dir))  # <class 'pathlib.PosixPath'>

1.2 遍历一个目录下指定文件

os方法

file_list = []
for file in os.listdir(csv_dir):
    if not file.endswith('.csv'):
        continue
    file_list.append(file)

pathlib方法

from pathlib import Path
csv_dir = Path(csv_dir)
file_list = csv_dir.glob('*.csv')

1.3 递归目录下的所有文件

os方法

os.walk方法

file_list = []
for root, dirs, files in os.walk('/Users/root/Code/project'):
  for f in files:
    if f.endswith('.py'):
      file_list.append(os.path.join(root, f))
# glob方法
from glob import glob
file_list = glob('/Users/root/Code/project/**/*.py', recursive=True)

pathlib方法

file_list = csv_dir.rglob('*.csv')  # 生成器对象

2. 优势对比

1、当需要获取多个层级目录时,os.path需要使用嵌套的写法,而pathlib则是正常的链式调用。pathlib的使用更加友好,使得路径对象更加明确。
2、os.path只用于基本的路径处理,如果需要其他操作如重命名/新建/复制文件等,需要用os下的其他模块。而pathlib可以用于处理路径相关操作,并且是一个轻量级的库。
3、os.path操作的路径时字符串,而pathlib操作的路径时对象。提供了对资源路径和资源命名结构的通用抽象。它把文件系统接口从os模块中隔离出来,打开了从应用层配置文件系统的大门。

换句话说,pathlib.Path这个接口代表的可以不仅是os的资源路径,还可以是HDFS的资源路径,RESTful API的资源路径。

3. 基本介绍

1、官网上给出的该模块提供表示文件系统路径的类,如下,其语义适用于不同的操作系统,路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。一般情况下,直接使用Path即可。

2、Path属性

4. 常见用法

获取当前文件绝对路径

from pathlib import Path
path = Path(__file__).resolve()
path
>>> /Users/root/Code/project/conf/path_conf.py

获取当前文件的上级目录

from pathlib import Path
path = Path(__file__).resolve()
path.parent
>>> /Users/root/Code/project/conf
path.parent.parent
>>> /Users/root/Code/project

获取文件名

from pathlib import Path
path = Path(__file__).resolve()
path.name
>>> path_conf.py
path.stem
>>> path_conf
path.suffix
>>> .py

修改文件名,修改后缀

from pathlib import Path
file = Path('data.csv')
new_file = file.with_name('result.csv')
new_file = file.with_suffix('.txt')

路径拼接

from pathlib import Path
root = Path(__file__).resolve().parent
# 方式1
conf_file = root / 'conf/path_conf.py'
# 方式2
conf_file = root / Path('conf/path_conf.py')
# 方式3
conf_file = root.joinpath('conf/path_conf.py')

路径判断

from pathlib import Path
path = Path(__file__).resolve()
path.is_file()  # 是否为文件
path.is_dir()  # 是否为目录
path.exists()  # 是否存在

文件操作

from pathlib import Path
file = Path(__file__).resolve()
file.touch()  # 新建文件
file.replace('../data.csv')  # 移动文件
file.unlink()  # 删除文件

读取文件

file = Path('../data/1.csv')
data = file.read_text()  # 读取文件
data = file.write_text()  # 写入文件
# 也可以作为普通路径使用
with open(file, 'r') as f:
  data = f.read()

5. 参考资料

https://docs.python.org/zh-cn/3/library/pathlib.html
https://www.cnblogs.com/heniu/p/12872604.html
https://zhuanlan.zhihu.com/p/87940289
https://zhuanlan.zhihu.com/p/33524938
https://www.jianshu.com/p/a820038e65c3
https://cloud.tencent.com/developer/article/1640696

相关文章

  • Python 实现在文件中的每一行添加一个逗号

    Python 实现在文件中的每一行添加一个逗号

    下面小编就为大家分享一篇Python 实现在文件中的每一行添加一个逗号,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python 读写文件和file对象的方法(推荐)

    Python 读写文件和file对象的方法(推荐)

    下面小编就为大家带来一篇Python 读写文件和file对象的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • python获取中文字符串长度的方法

    python获取中文字符串长度的方法

    今天小编就为大家分享一篇python获取中文字符串长度的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python opencv 批量改变图片的尺寸大小的方法

    python opencv 批量改变图片的尺寸大小的方法

    这篇文章主要介绍了python opencv 批量改变图片的尺寸大小的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 详解Python list 与 NumPy.ndarry 切片之间的对比

    详解Python list 与 NumPy.ndarry 切片之间的对比

    这篇文章主要介绍了详解Python list 与 NumPy.ndarry 切片之间的区别的相关资料,list 切片返回的是不原数据,对新数据的修改不会影响原数据而NumPy.ndarry 的切片返回的是原数据需要的朋友可以参考下
    2017-07-07
  • Python中函数参数匹配模型详解

    Python中函数参数匹配模型详解

    这篇文章主要介绍了Python函数参数匹配模型,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Python OpenCV的基本使用及相关函数

    Python OpenCV的基本使用及相关函数

    这篇文章主要介绍了Python-OpenCV的基本使用和相关函数介绍,主要包括图像的读取保存图像展示问题,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • tensorflow之读取jpg图像长和宽实例

    tensorflow之读取jpg图像长和宽实例

    这篇文章主要介绍了tensorflow之读取jpg图像长和宽实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 一篇文章带你了解kali局域网攻击

    一篇文章带你了解kali局域网攻击

    这篇文章主要给大家介绍了kali的局域网攻击,小编觉得这篇文章还是不错的,使用起来也是非常方便的,需要的朋友可以参考下
    2021-08-08
  • python如何基于redis实现ip代理池

    python如何基于redis实现ip代理池

    这篇文章主要介绍了python如何基于redis实现ip代理池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论