Python 官方文档:入门教程 => 点击学习
目录1. pathlib库介绍2. pathlib库下Path类的基本使用2.1 获取文件名2.2 获取文件前缀和后缀2.3 获取文件的文件夹及上一级、上上级文件夹2.4 获取该文件
相比常用的 os.path
而言,pathlib
对于目录路径的操作更简洁也更贴近 pythonic(Python代码风格的)。但是它不单纯是为了简化操作,还有更大的用途。
pathlib
是Python内置库,Python 文档给它的定义是:
The pathlib module – object-oriented filesystem paths(面向对象的文件系统路径)
pathlib
提供表示文件系统路径的类,其语义适用于不同的操作系统。
from pathlib import Path # 导入pathlib的Path类
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib库的使用.ipynb"
p = Path(path)
print(f"获取文件名:{p.name}") # 获取文件名:pathlib库的使用.ipynb
—— .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
—— .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: 最上级的文件夹是一个/
—— .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: /
"""
按照/
进行分割 —— .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
"""
—— 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
"""
home
目录路径 —— Path.home()
系列
from pathlib import Path
print(f"获取用户home路径: {Path.home()}")
"""
获取用户home路径: /home/leovin
"""
—— 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
—— Path("路径").exists()
from pathlib import Path
print(f"目标路径的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders/xxx').exists()}") # False
print(f"目标路径的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders').exists()}") # True
—— 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为文件夹
—— 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
—— 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
"""
—— 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
"""
—— 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
"""
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库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Python中的pathlib库使用详解
本文链接: https://lsjlt.com/news/118227.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0