前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pathlib的使用,用于替换os包

pathlib的使用,用于替换os包

原创
作者头像
renhai
发布2024-05-18 20:47:34
530
发布2024-05-18 20:47:34

Python中的pathlib模块很好地展示了面向对象编程的特点,主要通过以下几个方面来体现:

1. 类和对象的使用

pathlib模块中,核心类是Path(对于具体路径操作)和PurePath(对于纯路径操作,不涉及I/O)。这些类允许你创建代表文件系统路径的对象。通过实例化这些类,你可以获得表示特定路径的对象,并对这些对象执行各种操作。

例如,你可以这样做:

代码语言:python
代码运行次数:0
复制
from pathlib import Path

# 创建一个Path对象
p = Path('/usr/bin/python3')

# 访问路径的部件
print(p.parts)  # ('/', 'usr', 'bin', 'python3')

# 检查路径是否存在
print(p.exists())  # True 或 False

2. 封装

pathlib模块通过PathPurePath类封装了与文件系统路径相关的所有逻辑。这意味着你可以通过调用对象的方法来执行复杂的路径操作,而无需自己编写这些逻辑。

例如,假设你想创建一个新的目录,并在其中写入一个文件。使用pathlib,你可以这样做:

代码语言:python
代码运行次数:0
复制
from pathlib import Path

# 创建一个目录
directory = Path('my_directory')
directory.mkdir(parents=True, exist_ok=True)

# 在该目录中写入一个文件
file_path = directory / 'my_file.txt'
file_path.write_text('Hello, world!')

在上述代码中,你不需要关心如何实际创建目录或写入文件。pathlib模块为你处理了这些细节。

3. 继承和多态

pathlib模块中的类结构体现了继承和多态的概念。PurePath是所有路径类的基类,它提供了与操作系统无关的路径操作方法。然后,PurePosixPathPureWindowsPath分别继承自PurePath,为POSIX和Windows风格的路径提供了特定实现。

Path类进一步继承自这些纯路径类,并添加了I/O操作方法,如read_text()write_text()

多态性体现在你可以对Path对象执行许多不同的操作,而无需关心它是代表文件还是目录。例如,exists()方法可以用于检查文件或目录是否存在。

4. 其他面向对象特性

  • 属性访问Path对象允许你像访问属性一样访问路径的部分,例如p.parent会返回表示父目录的Path对象。
  • 操作符重载Path类重载了除法和字符串转换操作符,使得路径拼接和转换更加自然。例如,directory / 'my_file.txt'会返回一个新的Path对象,表示my_directory下的my_file.txt
  • 异常处理pathlib模块定义了特定的异常类,如FileNotFoundError,这使得错误处理更加面向对象和具有描述性。

综上所述,pathlib模块通过类和对象、封装、继承和多态等面向对象编程的特点,提供了一种更加现代、简洁和可维护的方式来处理文件系统路径和I/O操作。


查询整个文件夹(包含子文件夹)的pdf文件:

代码语言:python
代码运行次数:0
复制
from pathlib import Path
import os

pdf_dir = Path("../Papers")

# 使用 rglob() 方法查找所有 PDF 文件
pdf_files = pdf_dir.rglob("*.pdf")
for file in pdf_files:
    print(file)

# 如果只查找父目录使用:
pdf_files = Path("../Papers")

以前使用os遍历子文件夹很麻烦,例如:

代码语言:python
代码运行次数:0
复制
# 使用 os.walk() 函数遍历子文件夹
for dirpath, dirnames, filenames in os.walk(pdf_dir):
    for filename in filenames:
        if filename.endswith(".pdf"):
            print(os.path.join(dirpath, filename))

使用glob稍微好一点,但是依旧没有体现python作为一门面向对象编程的特点。

pdf_path.stem 的含义

在 Python 中,pathlib 模块提供了一种面向对象的方式来处理文件和目录路径。 Path 对象表示文件系统中的一个路径,它具有许多属性和方法,可以方便地操作路径信息。

pdf_path.stem 属性返回路径的文件名,不包含扩展名。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 类和对象的使用
  • 2. 封装
  • 3. 继承和多态
  • 4. 其他面向对象特性
  • pdf_path.stem 的含义
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档