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库内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python中的pathlib库使用详解的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部