当前位置: 代码网 > it编程>前端脚本>Python > Python中pathlib库的使用小结

Python中pathlib库的使用小结

2025年11月24日 Python 我要评论
1.pathlib库介绍相比常用的 os.path 而言,pathlib 对于目录路径的操作更简洁也更贴近 pythonic(python代码风格的)。但是它不单纯是为了简化操作,还有更大的用途。pa

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('./pathlib库的使用.ipynb')}")
print(f"转换后的路径为: {path('./pathlib库的使用.ipynb').resolve()}")

"""
转换前的路径为: pathlib库的使用.ipynb
转换后的路径为: /home/leovin/jupyternotebookfolders/pathlib库的使用.ipynb
"""

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

参考

  1. https://www.jb51.net/article/193402.htm
  2. https://docs.python.org/zh-cn/3/library/pathlib.html?highlight=pathlib#module-pathlib

到此这篇关于python中pathlib库的使用小结的文章就介绍到这了,更多相关python pathlib库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com