当前位置: 代码网 > it编程>前端脚本>Python > Python使用pathlib进行文件系统操作

Python使用pathlib进行文件系统操作

2024年11月14日 Python 我要评论
pathlib 是 python 的一个标准库,它提供了一个面向对象的文件系统路径操作接口。使用 pathlib,你可以以一种更直观和更易于理解的方式处理文件路径,而不必使用字符串操作来分割和连接路径

pathlib 是 python 的一个标准库,它提供了一个面向对象的文件系统路径操作接口。使用 pathlib,你可以以一种更直观和更易于理解的方式处理文件路径,而不必使用字符串操作来分割和连接路径。

os模块 vs pathlib

在python 3.4之前,处理文件路径的更传统的方法是使用os模块。

我们可以通过考虑数据科学中的一个常见任务来展示pathlib的独特价值:如何找到给定目录及其所有子目录中的所有png文件。

如果我们使用的是os模块,我们可能会编写以下代码:

import os
dir_path = "/home/user/documents"
files = [
os.path.join(dir_path, f)
for f in os.listdir(dir_path)
if os.path.isfile(os.path.join(dir_path, f)) and f.endswith(".png")
]

虽然这段代码解决了查找png文件的即时任务,但它揭示了os模块的几个主要缺点。首先,代码很长,几乎不可读,这是一个遗憾,考虑到这是一个相对简单的操作。第二点,我们的代码假设了列表解析的知识,这不应该被认为是理所当然的。第三点,代码涉及字符串操作,这是容易出错的。最重要的是,代码不是很简洁。

相反,如果我们使用pathlib模块,我们的代码会简单得多。正如我们所提到的,pathlib提供了一种面向对象的方法来处理文件系统路径。

from pathlib import path

# create a path object
dir_path = path(dir_path)

# find all text files inside a directory
files = list(dir_path.glob("*.png"))

这种面向对象的编程围绕对象及其交互来组织代码,从而产生更多的模块化、可重用和可维护的代码。

在python中使用path对象

pathlib库围绕所谓的path对象展开,paths对象是一种以结构化和平台 独立的方式。

我们使用以下代码行将path类从pathlib模块引入到当前的命名空间中:

from pathlib import path

从pathlib调用path类后,我们可以通过多种方式创建path对象,包括从字符串、从其他path对象、从当前工作目录和从主目录。

从字符串创建路径对象

我们可以通过将表示文件系统路径的字符串传递给变量来创建path对象。这将文件路径的字符串表示形式转换为path对象。

file_path_str = "data/union_data.csv"

data_path = path(file_path_str)

从其他路径对象创建

现有的path对象可以用作创建新路径的构建块。

我们通过将基本路径、数据目录和文件名组合成一个文件路径来实现这一点。我们必须记住在适当的地方使用正斜杠来扩展path对象。

base_path = path("/home/user")
data_dir = path("data")

# combining multiple paths
file_path = base_path / data_dir / "prices.csv"  
print(file_path)

输出

'/home/user/data/prices.csv'

从当前工作目录创建路径对象

这里我们使用path.cwd()方法将当前工作目录分配给cwd变量。然后,我们可以检索脚本运行的当前工作目录的路径。

cwd = path.cwd()

​​​​​​​print(cwd)

输出

'/home/bexgboost/articles/2024/4_april/8_pathlib'

从主工作目录创建路径对象

我们可以通过将主目录与其他子目录组合来构造路径。在这里,我们将主目录与子目录“downloads”和“projects”合并。"

home = path.home()

​​​​​​​home / "downloads" / "projects"

重要提示:path类本身不执行任何文件系统操作,如路径验证、创建目录或文件。它被设计用于表示和操作路径。要与文件系统进行实际交互(检查是否存在,阅读/写入文件),我们必须使用path对象的特殊方法,对于某些高级情况,请从os模块获得帮助。

在python中使用path组件

文件路径属性是文件路径的各种属性和组件,有助于识别和管理文件系统中的文件和目录。就像物理地址有不同的部分,如街道号码,城市,国家和邮政编码,文件系统路径可以分解为更小的组件。pathlib允许我们通过点表示法使用路径属性访问和操作这些组件。

使用根目录

根目录是文件系统中最顶层的目录。在类unix系统中,它由正斜杠(/)表示。在windows中,它通常是一个驱动器号后跟一个冒号,如c:。

image_file = home / "downloads" / "midjourney.png"

image_file.root

输出

'/'

使用父目录

父级包含当前文件或目录。它相对于当前目录或文件高一级。

image_file.parent

输出

posixpath('/home/bexgboost/downloads')

使用文件名

此属性以字符串形式返回整个文件名,包括扩展名。

image_file.name

输出

'midjourney.png'

使用文件后缀

suffix属性以字符串形式返回文件扩展名,包括点(如果没有扩展名,则返回空字符串)。

image_file.suffix

输出

'.png'

注意:在mac上,文件路径区分大小写,因此/users/username/documents和/users/username/documents会有所不同。

.parts属性

我们可以使用.parts属性将path对象拆分为它的组件。

image_file.parts

输出

('/', 'home', 'bexgboost', 'downloads', 'midjourney.png')

使用pathlib的常见路径操作

以下是一些使用 pathlib 进行常见路径操作的示例:

1.创建路径对象:

from pathlib import path
p = path("/usr/bin")

2.路径拼接:

new_path = p / "local" / "script.py"

3.获取文件扩展名:

extension = new_path.suffix

4.更改文件扩展名:

new_extension = new_path.with_suffix(".txt")

5.检查路径是否存在:

exists = new_path.exists()

6.检查路径是否为文件:

is_file = new_path.is_file()

7.检查路径是否为目录:

is_dir = new_path.is_dir()

8.读取文件内容:

with new_path.open('r') as file:
    content = file.read()

9.写入文件内容:

with new_path.open('w') as file:
    file.write("hello, world!")

10.删除文件:

new_path.unlink()

11.创建目录:

new_path.mkdir(parents=true, exist_ok=true)

12.删除目录:

new_path.rmdir()

14.获取目录中的文件和子目录:

items = list(new_path.iterdir())

15.绝对路径:

absolute_path = new_path.absolute()

16.相对路径:

relative_path = new_path.relative_to("/usr")

17.路径解析:

parts = new_path.parts
drive, root, parts = new_path.drive, new_path.root, new_path.parts

18.路径字符串转换:

path_str = str(new_path)

19.遍历目录树:

for child in new_path.rglob('*.py'):
    print(child)

这些是 pathlib 模块提供的一些基本操作。pathlib 模块使得文件系统路径的操作更加直观和易于管理。

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

(0)

相关文章:

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

发表评论

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