Python中的pathlib
模块很好地展示了面向对象编程的特点,主要通过以下几个方面来体现:
在pathlib
模块中,核心类是Path
(对于具体路径操作)和PurePath
(对于纯路径操作,不涉及I/O)。这些类允许你创建代表文件系统路径的对象。通过实例化这些类,你可以获得表示特定路径的对象,并对这些对象执行各种操作。
例如,你可以这样做:
from pathlib import Path
# 创建一个Path对象
p = Path('/usr/bin/python3')
# 访问路径的部件
print(p.parts) # ('/', 'usr', 'bin', 'python3')
# 检查路径是否存在
print(p.exists()) # True 或 False
pathlib
模块通过Path
和PurePath
类封装了与文件系统路径相关的所有逻辑。这意味着你可以通过调用对象的方法来执行复杂的路径操作,而无需自己编写这些逻辑。
例如,假设你想创建一个新的目录,并在其中写入一个文件。使用pathlib
,你可以这样做:
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
模块为你处理了这些细节。
pathlib
模块中的类结构体现了继承和多态的概念。PurePath
是所有路径类的基类,它提供了与操作系统无关的路径操作方法。然后,PurePosixPath
和PureWindowsPath
分别继承自PurePath
,为POSIX和Windows风格的路径提供了特定实现。
Path
类进一步继承自这些纯路径类,并添加了I/O操作方法,如read_text()
和write_text()
。
多态性体现在你可以对Path
对象执行许多不同的操作,而无需关心它是代表文件还是目录。例如,exists()
方法可以用于检查文件或目录是否存在。
Path
对象允许你像访问属性一样访问路径的部分,例如p.parent
会返回表示父目录的Path
对象。Path
类重载了除法和字符串转换操作符,使得路径拼接和转换更加自然。例如,directory / 'my_file.txt'
会返回一个新的Path
对象,表示my_directory
下的my_file.txt
。pathlib
模块定义了特定的异常类,如FileNotFoundError
,这使得错误处理更加面向对象和具有描述性。综上所述,pathlib
模块通过类和对象、封装、继承和多态等面向对象编程的特点,提供了一种更加现代、简洁和可维护的方式来处理文件系统路径和I/O操作。
查询整个文件夹(包含子文件夹)的pdf文件:
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遍历子文件夹很麻烦,例如:
# 使用 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作为一门面向对象编程的特点。
在 Python 中,pathlib
模块提供了一种面向对象的方式来处理文件和目录路径。 Path
对象表示文件系统中的一个路径,它具有许多属性和方法,可以方便地操作路径信息。
pdf_path.stem
属性返回路径的文件名,不包含扩展名。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。