Python中的pathlib库使用详解

目录
  • 1. pathlib库介绍
  • 2. pathlib库下Path类的基本使用
    • 2.1 获取文件名
    • 2.2 获取文件前缀和后缀
    • 2.3 获取文件的文件夹及上一级、上上级文件夹
    • 2.4 获取该文件所属的文件夹及其父文件夹
    • 2.5 文件绝对路径
    • 2.6 获取当前工作目录
    • 2.7 获取用户
    • 2.8 获取文件详细信息
    • 2.9 检查目录或者文件是否存在
    • 2.10 检查指定指定路径是否为folder或者file
    • 2.11 将相对路径转换为绝对路径
    • 2.12 遍历一个目录
    • 2.13 获取所有符合pattern的文件
    • 2.14 删除文件(非目录)
  • 3. pathlib库与os库的对比
  • 参考

1. pathlib库介绍

相比常用的 os.path 而言,pathlib 对于目录路径的操作更简洁也更贴近 Pythonic(Python代码风格的)。但是它不单纯是为了简化操作,还有更大的用途

pathlib 是Python内置库,Python 文档给它的定义是:

The pathlib module – object-oriented filesystem paths(面向对象的文件系统路径)

pathlib 提供表示文件系统路径的类,其语义适用于不同的操作系统

2. pathlib库下Path类的基本使用

2.1 获取文件名

from pathlib import Path  # 导入pathlib的Path类
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"获取文件名:{p.name}")  # 获取文件名:pathlib库的使用.ipynb

2.2 获取文件前缀和后缀

—— .stem & .suffix

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"获取前缀:{p.stem}")  # 获取前缀:pathlib库的使用
print(f"获取后缀:{p.suffix}")  # 获取后缀:.ipynb

2.3 获取文件的文件夹及上一级、上上级文件夹

—— .parent

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"获取当前文件所属文件夹:{p.parent}")
print(f"获取上一级文件夹:{p.parent.parent}")
print(f"获取上上一级文件夹:{p.parent.parent.parent}")
"""
获取当前文件所属文件夹:/home/leovin/JupyterNotebookFolders
获取上一级文件夹:/home/leovin
获取上上一级文件夹:/home
"""

Note: 最上级的文件夹是一个/

2.4 获取该文件所属的文件夹及其父文件夹

—— .parents

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"获取当前文件所属文件夹及其父文件夹:{p.parents}\n")
# 遍历
for idx, folder_path in enumerate(p.parents):
    print(f"No.{idx}: {folder_path}")
"""
获取当前文件所属文件夹及其父文件夹:<PosixPath.parents>

No.0: /home/leovin/JupyterNotebookFolders
No.1: /home/leovin
No.2: /home
No.3: /
"""

2.5 文件绝对路径

按照/进行分割 —— .parts

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"将文件的绝对路径按照`/`进行分割,返回一个tuple:{p.parts}\n")
# 遍历
for idx, element in enumerate(p.parts):
    print(f"No.{idx}: {element}")
"""
获取当前文件所属文件夹及其父文件夹:<PosixPath.parents>
No.0: /
No.1: home
No.2: leovin
No.3: JupyterNotebookFolders
No.4: pathlib库的使用.ipynb
"""

2.6 获取当前工作目录

—— Path.cwd()

from pathlib import Path
import os
path_1 = Path.cwd()
path_2 = os.getcwd()
print(f"Path.cwd(): {path_1}")
print(f"os.getcwd(): {path_2}")
"""
Path.cwd(): /home/leovin/JupyterNotebookFolders
os.getcwd(): /home/leovin/JupyterNotebookFolders
"""

2.7 获取用户

home目录路径 —— Path.home()系列

from pathlib import Path
print(f"获取用户home路径: {Path.home()}")
"""
获取用户home路径: /home/leovin
"""

2.8 获取文件详细信息

—— object.stat()

from pathlib import Path
p = Path("/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb")
print(f"获取文件详细信息: {p.stat()}\n")
print(f"获取文件字节大小: {p.stat().st_size}\n")
print(f"获取文件创建时间: {p.stat().st_ctime}\n")  # c: create
print(f"获取文件上次修改时间: {p.stat().st_mtime}\n")  # m:: modify
"""
获取文件详细信息: os.stat_result(st_mode=33204, st_ino=23860358, st_dev=2052, st_nlink=1, st_uid=1000, st_gid=1000, st_size=12125, st_atime=1653039478, st_mtime=1653039478, st_ctime=1653039478)

获取文件字节大小: 12125

获取文件创建时间: 1653039478.703161

获取文件上次修改时间: 1653039478.703161
"""

可以看到,object.stat().xxx就是在调用attr

2.9 检查目录或者文件是否存在

—— Path("路径").exists()

from pathlib import Path
print(f"目标路径的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders/xxx').exists()}")  # False
print(f"目标路径的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders').exists()}")  # True

2.10 检查指定指定路径是否为folder或者file

—— Path("路径").is_file() & Path("路径").is_dir()

from pathlib import Path
print(f"目标路径是否为文件: {Path('/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb').is_file()}")  # True
print(f"目标路径是否为文件夹: {Path('/home/leovin/JupyterNotebookFolders/').is_dir()}")  # True

directory为文件夹

2.11 将相对路径转换为绝对路径

—— Path("路径").resolve()

from pathlib import Path
print(f"目标路径是否为文件: {Path('/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb').is_file()}")  # True
print(f"目标路径是否为文件夹: {Path('/home/leovin/JupyterNotebookFolders/').is_dir()}")  # True

2.12 遍历一个目录

—— Path("路径").iterdir()

from pathlib import Path
path_object = Path("/home/leovin/JupyterNotebookFolders/").iterdir()
print(f"path_object: {path_object}")  # path_object: <generator object Path.iterdir at 0x7f0ca0061c10>
# 迭代目录对象
for idx, element in enumerate(path_object):
    print(f"No.{idx}: {element}")
"""
path_object: <generator object Path.iterdir at 0x7f0ca0061c10>
No.0: /home/leovin/JupyterNotebookFolders/temp
No.1: /home/leovin/JupyterNotebookFolders/torch.meshgrid().ipynb
No.2: /home/leovin/JupyterNotebookFolders/array.argsort().ipynb
No.3: /home/leovin/JupyterNotebookFolders/切片....ipynb
No.4: /home/leovin/JupyterNotebookFolders/logging信息.log
No.5: /home/leovin/JupyterNotebookFolders/Python中类的私有变量、私有方法、静态方法.ipynb
No.6: /home/leovin/JupyterNotebookFolders/temp_file.ipynb
No.7: /home/leovin/JupyterNotebookFolders/example.log
No.8: /home/leovin/JupyterNotebookFolders/Python语法.ipynb
No.9: /home/leovin/JupyterNotebookFolders/.ipynb_checkpoints
No.10: /home/leovin/JupyterNotebookFolders/craw.data.txt
No.11: /home/leovin/JupyterNotebookFolders/test.txt
No.12: /home/leovin/JupyterNotebookFolders/logging的学习.ipynb
No.13: /home/leovin/JupyterNotebookFolders/Test.ipynb
No.14: /home/leovin/JupyterNotebookFolders/算法题
No.15: /home/leovin/JupyterNotebookFolders/functions.ipynb
No.16: /home/leovin/JupyterNotebookFolders/mask转0&1.ipynb
No.17: /home/leovin/JupyterNotebookFolders/Multi_Task_in_Python.ipynb
No.18: /home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb
No.19: /home/leovin/JupyterNotebookFolders/三种激活函数绘制.ipynb
"""

2.13 获取所有符合pattern的文件

—— Path("路径").glob("folder1/xxx.格式")

from pathlib import Path
pattern = "JupyterNotebookFolders/*.ipynb"
glob_generator = Path("/home/leovin/").glob(pattern)
# 遍历返回的对象 -> 返回的是绝对路径
for idx, element in enumerate(glob_generator):
    print(f"No.{idx}: {element}")
"""
No.0: /home/leovin/JupyterNotebookFolders/torch.meshgrid().ipynb
No.1: /home/leovin/JupyterNotebookFolders/array.argsort().ipynb
No.2: /home/leovin/JupyterNotebookFolders/切片....ipynb
No.3: /home/leovin/JupyterNotebookFolders/Python中类的私有变量、私有方法、静态方法.ipynb
No.4: /home/leovin/JupyterNotebookFolders/temp_file.ipynb
No.5: /home/leovin/JupyterNotebookFolders/Python语法.ipynb
No.6: /home/leovin/JupyterNotebookFolders/logging的学习.ipynb
No.7: /home/leovin/JupyterNotebookFolders/Test.ipynb
No.8: /home/leovin/JupyterNotebookFolders/functions.ipynb
No.9: /home/leovin/JupyterNotebookFolders/mask转0&1.ipynb
No.10: /home/leovin/JupyterNotebookFolders/Multi_Task_in_Python.ipynb
No.11: /home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb
No.12: /home/leovin/JupyterNotebookFolders/三种激活函数绘制.ipynb
"""

2.14 删除文件(非目录)

—— Path("路径").unlink()

from pathlib import Path
# 当前文件夹下的txt文件
for idx, element in enumerate(Path("./").glob("*.txt")):
    print(f"No.{idx}: {element}")
print("-" * 30)
"""
    删除指定的文件(非目录)
        1. 是真的删除而非unlink
        2. 如果文件不存在则保存
"""
try:
    Path("./will_be_deleted.txt").unlink()
except Exception as e:
    print(f"删除文件发生错误,原因为: {e}")
# 当前文件夹下的txt文件
for idx, element in enumerate(Path("./").glob("*.txt")):
    print(f"No.{idx}: {element}")
"""
No.0: will_be_deleted.txt
No.1: craw.data.txt
No.2: test.txt
------------------------------
No.0: craw.data.txt
No.1: test.txt

报错的输出:
No.0: craw.data.txt
No.1: test.txt
------------------------------
删除文件发生错误,原因为: [Errno 2] No such file or directory: 'will_be_deleted.txt'
No.0: craw.data.txt
No.1: test.txt
"""

3. pathlib库与os库的对比

os pathlib 描述 英文说明
os.path.abspath(("文件路径")) Path("文件路径").resolve() 将路径转换为绝对路径 -
os.chmod() Path("文件路径").chmod(xxx) 更改文件权限 change mode
os.mkdir(("文件路径")) Path("文件路径").mkdir() 新建文件夹 make directory
os.rename("文件路径", "xxx") Path("文件路径").rename("xxx") 重命名文件/文件夹名称 -
os.replace(a, b) Path("文件路径").replace(a, b) 替换字符串 -
os.rmdir() Path("文件路径").rmdir() 删除文件夹(里面必须是空的) remove directory
os.remove("文件路径") / os.unlink("文件路径") Path("文件路径").unlink() 删除文件(非目录) -
os.getcwd() Path("文件路径").cwd() 获取当前文件工作目录 current work directory
os.path.isdir() Path("文件路径").is_dir() 判断当前路径是否为目录 -
os.path.isfile() Path("文件路径").is_file() 判断当前路径是否为文件 -
os.stat() Path("文件路径").stat() 返回当前路径的信息 status
os.path.isabs() Path("文件路径").is_absolute() 判断当前路径是否为绝对路径 -
os.path.basename() Path("文件路径").name 返回文件/目录的基础名称(不带路径) -
os.path.dirname() Path("文件路径").parent 返回路径所属文件夹名称 -
os.path.samefile() Path("文件路径").samefile(xxx) 判断两个文件是否相同 -
os.path.splitext("文件路径") (Path("文件路径").stem, Path("文件路径").suffix) 将文件名分离,分成前缀和后缀 stem + suffix

参考

https://www.jb51.net/article/193402.htm

https://docs.python.org/zh-cn/3/library/pathlib.html?highlight=pathlib#module-pathlib

到此这篇关于Python中的pathlib库的文章就介绍到这了,更多相关Python pathlib库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3 pathlib库Path类方法总结

    这篇文章主要介绍了python3 pathlib库Path类方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.调用库 from pathlib import Path 2.创建path对象 p = Path(file) 3.方法总结 p.cwd() # 获取当前路径 p.stat() # 获取当前文件的信息 p.exists() # 判断当前路径是否是文件或者文件夹 p.glob(filename) # 获取路径下的所有符合filen

  • Python标准库pathlib操作目录和文件

    目录 pathlib 基本组件 常用属性和基本方法 总结 学习 Python 时,尤其是在进行文件操作和数据处理时,经常会处理路径问题.最常用和常见的是 os.path 模块,它将路径当做字符串进行处理,如果使用不当可能导致难以察觉的错误,而且代码很难跨平台复用.pathlib 就是一个非常棒的Python标准库,超级好用. pathlib模块提供了一种在 POSIX 系统(如 Linux 和 Windows)下运行良好的高级抽象,它抽象了资源路径和资源命名结构,把文件系统接口从os模块中隔离出

  • 对python3中pathlib库的Path类的使用详解

    用了很久的os.path,今天发现竟然还有这么好用的库,记录下来以便使用. 1.调用库 from pathlib import 2.创建Path对象 p = Path('D:/python/1.py') print(p) #可以这么使用,相当于os.path.join() p1 = Path('D:/python') p2 = p1/'123' print(p2) 结果 D:\python\1.py D:\python\123 3.Path.cwd() 获取当前路径 path = Path.cw

  • Python中的pathlib库使用详解

    目录 1. pathlib库介绍 2. pathlib库下Path类的基本使用 2.1 获取文件名 2.2 获取文件前缀和后缀 2.3 获取文件的文件夹及上一级.上上级文件夹 2.4 获取该文件所属的文件夹及其父文件夹 2.5 文件绝对路径 2.6 获取当前工作目录 2.7 获取用户 2.8 获取文件详细信息 2.9 检查目录或者文件是否存在 2.10 检查指定指定路径是否为folder或者file 2.11 将相对路径转换为绝对路径 2.12 遍历一个目录 2.13 获取所有符合pattern

  • Python中logging日志库实例详解

    logging的简单使用 用作记录日志,默认分为六种日志级别(括号为级别对应的数值) NOTSET(0) DEBUG(10) INFO(20) WARNING(30) ERROR(40) CRITICAL(50) special 在自定义日志级别时注意不要和默认的日志级别数值相同 logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO.WARNING.ERROR.CRITICAL 级别的日志都会输出. |2logging常见对象 Logger:日志,

  • python中的colorlog库使用详解

    一. 描述 colorlog.ColoredFormatter是一个Python logging模块的格式化,用于在终端输出日志的颜色 二. 安装 pip install colorlog 三. 用法 import colorlog handler = colorlog.StreamHandler() handler.setFormatter(colorlog.ColoredFormatter( '%(log_color)s%(levelname)s:%(name)s:%(message)s')

  • Python中协程用法代码详解

    本文研究的主要是python中协程的相关问题,具体介绍如下. Num01–>协程的定义 协程,又称微线程,纤程.英文名Coroutine. 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元. 为啥说他是一个执行单元,因为他自带CPU上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. Num02–>协程和线程的差异 那么这个过程看起来和线程差不多.其实不然, 线程切换从系统层面远不止保存和恢复 CP

  • python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算.         Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是大多数人所熟悉的模型,而不是程序员熟悉的模型,即大多数计算机硬件实现的 IEEE 浮点数运算.Decimal 实例可以准确地表示任何数,对其上取整或下取整,还可以对有效数字个数加以限制. Decimal 小数值表示为 Decimal 类的实例.构造函数取一个整数或字符串作为参数.使用

  • 对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: #import itertools from itertools import * #最好使用时用上面那个,不过下面的是为了演示比较 常用的,所以就直接全部导入了 一.无限迭代器: 由于这些都是无限迭代器,因此使用的时候都要设置终止条件,不然会一直运行下去,也就不是我们想要的结果了. 1.coun

  • Python中图像算术运算的示例详解

    目录 介绍 算术运算:图像相加 算术运算:图像减法 位运算 介绍 还记得你在小学时学习如何加减数字吗?现在,你也可以对图像做同样的事情! 输入图像可以进行算术运算,例如加法.减法和按位运算(AND.OR.NOT.XOR).这些操作可以帮助提高输入照片的质量. 在本文中,你将了解使用 OpenCV Python 包对图像执行算术和按位运算的步骤.让我们开始吧! 对图像进行算术运算是什么意思? 因此,假设我们希望合并两张单独的照片中的两个像素.我们怎样才能将它们合并? 让我们想象以下场景.第一个像素

  • 基于python中的TCP及UDP(详解)

    python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = socket() # 创建服务器套接字 ss.bind() # 套接字与地址绑定 ss.listen() # 监听连接 inf_loop: # 服务器无限循环 cs = ss.accept() # 接受客户端连接 comm_loop: # 通信循环 cs.recv()/cs.send() # 对话(接收/发

  • python中模块的__all__属性详解

    python模块中的__all__属性,可用于模块导入时限制,如: from module import * 此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入. 若没定义,则导入模块内的所有公有属性,方法和类 # kk.py class A(): def __init__(self,name,age): self.name=name self.age=age class B(): def __init__(self,name,id): self.nam

  • Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的所有元素,但是不想用for循环 解决方案:使用next()函数,并捕获StopIteration异常 def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: br

随机推荐