【1】Python内置库:pathlib模块详解

1. 概述

Pathlib模块提供了表示文件系统路径的类,其语义适用于不同的操作系统。路径类分为纯路径和具体路径,前者提供无I/O的纯计算操作,后者继承纯路径,但也提供I/O操作。

2. 与os模块中函数对应关系

下表将各种os模块函数映射到相应的PurePath/Path等价函数。

尽管os.path.relpath()和PurePath.rerelative_to()有一些重叠的用例,但它们的语义差异足以保证不认为它们是等效的。

函数具体作用请参考官网: (pathlib --- Object-oriented filesystem paths --- Python 3.9.17 documentation)

3. pathlib模块内置函数

3.1 获取目录

  • Path.cwd(), 返回文件当前所在目录
  • Path.home(),返回用户的主目录
python 复制代码
from pathlib import Path

current_path = Path.cwd()
home_path = Path.home()
print(f"文件当前所在目录:{current_path }\n用户主目录:{home_path}")

输出: 
文件当前所在目录:E:\CYX_DeepLearning
用户主目录:C:\Users\22799

3.2 目录拼接

scss 复制代码
from pathlib import Path

parts = ['dataset', '1.txt']


print(Path.cwd())
print(Path.cwd().joinpath(*parts))
print(Path.cwd().parent.joinpath(*parts))
print(Path.cwd().parent.parent.joinpath(*parts))

输出:

E:\CYX_DeepLearning
E:\CYX_DeepLearning\dataset\1.txt
E:\dataset\1.txt
E:\dataset\1.txt

斜杠 / 操作符用于拼接路径

python 复制代码
from pathlib import Path

newPath = Path.cwd() / 'python'
print(Path.cwd())
print(f"目录为:{newPath}")

输出;

E:\CYX_DeepLearning
目录为:E:\CYX_DeepLearning\python

3.3 创建、删除目录, 计算相对路径

  • Path.mkdir(),创建给定路径的目录。
  • Path.rmdir(),删除该目录,目录文件夹必须为空。
  • Path.relative_to(),用于获取一个路径相对于另一个基础路径的相对路径。
  • Path.unlink() 方法用于删除指定路径所指向的文件或符号链接
ini 复制代码
from pathlib import Path

# mkdir()方法默认情况下不会创建父级目录。如果你想要创建嵌套的目录结构,你需要设置 parents=True 参数。

# 创建一个名为 "1.txt" 的新目录
path = Path(Path.cwd()/'1.txt')
path.mkdir()

# 也可以使用多级目录路径创建目录
nested_path = Path(Path.cwd()/'3'/'2.txt')
nested_path.mkdir(parents=True)
ini 复制代码
from pathlib import Path

# 删除一个空目录
path = Path("/path/to/directory")
path.rmdir()

FileNotFoundError: [WinError 3] 系统找不到指定的路径。: '\\path\\to\\directory'
ini 复制代码
from pathlib import Path

base_path = Path("/home/user")
file_path = Path("/home/user/documents/file.txt")

relative_path = file_path.relative_to(base_path)
print(relative_path)

输出;

documents\file.txt
ini 复制代码
from pathlib import Path

file_path = Path("/path/to/file.txt")
file_path.unlink()

3.4 读写文件

  • Path.open(mode='r'),以 "r" 格式打开 Path 路径下的文件,若文件不存在即创建后打开。

  • Path.read_bytes(),读取指定路径下的文件,并以文本形式返回文件的内容,等同 open 操作文件的 "rb" 格式。

  • Path.read_text(),打开 Path 路径下的文件,以 str 格式读取文件内容,等同 open 操作文件的 "r" 格式。

  • Path.write_bytes(),将字节数据写入指定路径下的文件,等同 open 操作文件的 "wb" 格式。

  • Path.write_text(),将文本内容写入指定路径下的文件。,等同 open 操作文件的 "w" 格式。

ini 复制代码
from pathlib import Path

file_path = Path("/path/to/file.txt")

# 以只读模式打开文件
file_obj = file_path.open()

# 以写入模式打开文件
file_obj = file_path.open(mode='w')

# 以追加模式打开文件
file_obj = file_path.open(mode='a')

with file_path.open(mode='w') as file_obj:
    file_obj.write("这是要写入的句子。\n")
    file_obj.write("这是第二个句子。\n")
ini 复制代码
from pathlib import Path

# 读取文件内容并返回字符串
file_path = Path("/path/to/file.txt")
file_content = file_path.read_text()

# 输出文件所有内容
print(file_content)
ini 复制代码
from pathlib import Path

# 将字节数据写入文件
file_path = Path("./1.txt")
data = b"Hello, world!"  # 字节数据
file_path.write_bytes(data)
ini 复制代码
from pathlib import Path

# 将文本写入文件
file_path = Path("/path/to/file.txt")
text = "Hello, world!"  # 文本内容
file_path.write_text(text)

3.5 获取文件所在目录的不同部分字段

  • Path.resolve(),通过传入文件名,返回指定路径的绝对路径。
  • Path.parts 属性返回路径中不带分隔符的各个部分组成的元组。
  • Path.name,属性返回指定路径的基本文件名或目录名,包含后缀名。
  • Path.rename(),重命名路径
  • Path.parent,属性返回指定路径的父级路径。
  • Path.parents 属性返回指定路径的所有父级路径。
  • Path.stem,返回指定路径的文件名或目录名的基本名称部分,不包含后缀名。
  • Path.suffix,返回指定路径的文件的后缀(扩展名)部分。
  • Path.anchor,返回指定路径的根部分或驱动器部分。
  • Path.drive,返回驱动器名称。
  • Path.root,返回路径的根目录。
python 复制代码
from pathlib import Path

file_path = Path("/path/to/file.txt")
print(file_path.parts)

输出:

('\\', 'path', 'to', 'file.txt')
ini 复制代码
from pathlib import Path

path = Path("/path/to/old_name.txt")
new_path = path.rename("/path/to/new_name.txt")

print(new_path)  # 输出:/path/to/new_name.txt

3.6 文件、路径是否存在判断

  • Path.exists():用于检查指定路径是否存在。
  • Path.is_dir():用于检查指定路径是否是一个目录。
  • Path.is_file():检查指定路径是否是一个文件。
  • Path.is_absolute(),用于检查路径是否为绝对路径。
ini 复制代码
from pathlib import Path

file_path = Path("/path/to/file.txt")
exists = file_path.exists()

# 输出路径是否存在
print(exists)

3.7 文件统计以及匹配查找

  • Path.iterdir():方法返回一个迭代器,用于遍历指定路径下的所有子项(文件和目录)
  • Path.glob(pattern),方法返回一个迭代器,用于匹配指定路径下的文件和目录。
  • Path.rglob(pattern),返回一个递归迭代器,用于递归地匹配指定路径及其子目录下的文件和目录。
python 复制代码
from pathlib import Path

# 只返回该文件夹内的文件和目录
dir_path = Path("/path/to/directory")
for item in dir_path.iterdir():
   print(item)
python 复制代码
from pathlib import Path

dir_path = Path("/path/to/directory")
for item in dir_path.glob("*.txt"):
    print(item)
python 复制代码
from pathlib import Path

dir_path = Path("/path/to/directory")
for item in dir_path.rglob("*.txt"):
    print(item)

参考:

1.\]([pathlib --- Object-oriented filesystem paths --- Python 3.9.17 documentation](https://link.juejin.cn?target=https%3A%2F%2Fdocs.python.org%2F3.9%2Flibrary%2Fpathlib.html%23pathlib.PurePath.relative_to "https://docs.python.org/3.9/library/pathlib.html#pathlib.PurePath.relative_to")) \[2.\]([【34】pathlib 模块 - 掘金 (juejin.cn)](https://juejin.cn/post/7270171497988620300#comment "https://juejin.cn/post/7270171497988620300#comment"))

相关推荐
没有钱的钱仔30 分钟前
python文件传输 带进度条
服务器·网络·python
Python当打之年41 分钟前
【62 Pandas+Pyecharts | 智联招聘大数据岗位数据分析可视化】
大数据·python·数据分析·pandas·数据可视化
好易学·数据结构1 小时前
可视化图解算法51:寻找第K大(数组中的第K个最大的元素)
数据结构·python·算法·leetcode·力扣·牛客网·堆栈
纬领网络1 小时前
Linux环境下安装和使用RAPIDS平台的cudf和cuml - pip 安装方法
开发语言·python·pip
成都犀牛1 小时前
LlamaIndex 学习笔记
人工智能·python·深度学习·神经网络·学习
猛犸MAMMOTH1 小时前
Python打卡第53天
开发语言·python·深度学习
thinking-fish2 小时前
提示词Prompts(2)
python·langchain·提示词·提示词模板
2501_911828502 小时前
Python训练营---DAY53
python·深度学习
该用户已不存在3 小时前
Python生态全景图:8大主流框架怎么选,一篇文章告诉你
python·django·flask
广州正荣3 小时前
Python爬虫进阶:气象数据爬取中的多线程优化与异常处理技巧
人工智能·python·科技