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

 更新时间:2024年11月13日 09:41:59   作者:python收藏家  
pathlib 是 Python 的一个标准库,它提供了一个面向对象的文件系统路径操作接口,本文主要介绍了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文件系统操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现的字典值比较功能示例

    Python实现的字典值比较功能示例

    这篇文章主要介绍了Python实现的字典值比较功能,可实现针对字典格式数据的判断、比较功能,涉及Python字典格式数据的遍历、判断等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Python的numpy和pandas简介及使用场景

    Python的numpy和pandas简介及使用场景

    NumPy提供高效的多维数组操作和数学函数,而Pandas建立在NumPy之上,专注于表格数据的处理和高级分析,本文给大家介绍Python的numpy和pandas简介及使用场景,感兴趣的朋友一起看看吧
    2025-09-09
  • Python Playwright的使用详解

    Python Playwright的使用详解

    本篇博客为大家介绍一款新的自动化测试工具,效果类似 selenium,但是这个模块年轻。模块名称为 playwright-python,微软开源的,是针对 Python 语言的纯自动化工具,感兴趣的可以了解一下
    2022-10-10
  • Python matplotlib修改默认字体的操作

    Python matplotlib修改默认字体的操作

    这篇文章主要介绍了Python matplotlib修改默认字体的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python 字典(dict)遍历的四种方法性能测试报告

    python 字典(dict)遍历的四种方法性能测试报告

    本文主要是针对Python的字典dict遍历的4种方法进行了性能测试,以便分析得出效率最高的一种方法
    2014-06-06
  • Python中搜索和替换文件中的文本的实现(四种)

    Python中搜索和替换文件中的文本的实现(四种)

    本文主要介绍了Python中搜索和替换文件中的文本的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • windows下Anaconda的安装与配置正解(Anaconda入门教程)

    windows下Anaconda的安装与配置正解(Anaconda入门教程)

    最近很多朋友学习python,很多朋友也推荐使用anaconda这个工具,但安装以后也不会使用,这里脚本之家小编就为大家整理一下比较详细的教程,方便自己也方便需要的朋友,希望大家以后多多支持脚本之家
    2018-04-04
  • 创建SparkSession和sparkSQL的详细过程

    创建SparkSession和sparkSQL的详细过程

    SparkSession 是 Spark SQL 的入口,Builder 是 SparkSession 的构造器。 通过 Builder, 可以添加各种配置,并通过 stop 函数来停止 SparkSession,本文给大家分享创建SparkSession和sparkSQL的详细过程,一起看看吧
    2021-08-08
  • python内置函数breakpoint()与bytearray()示例详解

    python内置函数breakpoint()与bytearray()示例详解

    本文给大家分享的是python内置函数breakpoint()与bytearray()的相关资料,并给大家附上了详细代码,有需要的小伙伴可以参考下
    2017-04-04
  • 基于Python制作炸金花游戏的过程详解

    基于Python制作炸金花游戏的过程详解

    《诈金花》又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏。比如JJ比赛中的诈金花(赢三张),具有独特的比牌规则。本文江将通过Python语言实现这一游戏,需要的可以参考一下
    2022-02-02

最新评论