Python 更好的文件路径处理模块 pathlib详解

Python内置库之pathlib print(p.stat().st_atime) # 输出最后访问时间print(p.stat().st_mtime) # 输出最后修改时间print(p.stat().st_atime) # 输出文件系统最后访问时间print(p.stat().st_mtime) # 输出文件系统最后修改时间print(p.stat().st_atime) # 输出文件系统最后访问时间print(p.stat().st_mtime) # 输出文件系统最后修改时间。 阅读详情

1. 为什么需要pathlib

在pathlib出现之前, Python 的标准库os.path 支持操作文件路径, 使用字符串表示文件路径。

In [1]: import os.path

In [2]: os.path.abspath('test')
Out[2]: 'C:\\Users\\Public\\Documents\\test'

 如以上代码, abspath函数的返回是一个字符串. 如果想要获取父目录, 需要使用字符串的split方法

In [3]: path = os.path.abspath('test')

In [4]: path.rsplit('\\', maxsplit=1)[0]
Out[4]: 'C:\\Users\\Public\\Documents'

Out[5]: os.path.join(path, 'data.txt')
Out[5]: 'C:\\Users\\Public\\Documents\\test\\data.txt'

但是路径并不只是一个字符串,  如果需要对文件进行操作,  需要结合使用多个标准库的功能, 如: 需要移动当前目录下的一些文件到备份目录, 需要使用 os, glob, 和 shutil 库.

import glob
import os
import shutil

for file_name in glob.glob('*.txt'):
    new_path = os.path.join('backup', file_name)
    print(new_path)
    shutil.move(file_name, new_path)

 有了pathlib, 使得上述的问题变得更加轻松, pathlib 创建的Path对象, 可以直接通过正斜杠运算符 '/'   连接字符串生成新的对象.

In [1]: import pathlib

In [2]: path = pathlib.Path()
In [3]: path
Out[3]: WindowsPath('.')

In [4]: path.absolute() / 'test' / 'data.txt'
Out[4]: WindowsPath('C:/Users/Public/Documents/test/data.txt')

另外pathlib还提供了很多方便的功能,  下面来介绍一下pathlib的常用方法

2. pathlib的使用

2.1 创建路径

前面用到了 pathlib.Path() 获取当前路径的方法, 也可以显示的传入路径字符串进行路径创建.支持相对路径和绝对路径字符串的传递

In [5]: pathlib.Path('test')
Out[5]: WindowsPath('test')

In [6]: pathlib.Path('C:/Users/Public/Documents/test')
Out[6]: WindowsPath('C:/Users/Public/Documents/test')

另外 Path类还提供了一些类方法来更方便的获取路径. 如 .cwd()(当前工作目录)和.home()(您用户的主目录)

In [7]: pathlib.Path.cwd()
Out[7]: WindowsPath('C:/Users/Public/Documents')

In [8]: pathlib.Path.home()
Out[8]: WindowsPath('C:/Users/wyy')

2.2 读写文件

通常, Python中读写文件时使用内置的 open 函数, open函数支持 path对象为参数打开文件.

In [7]: data_file = pathlib.Path.cwd() / 'data.txt'

In [8]: with open(data_file, 'w') as f:
    ...:     f.write('testdata')

 path对象 提供了 open() 方法, 可以作为等效替代

In [9]: with data_file.open(mode='r') as f:
   ...:     print(f.read())
testdata

对于简单的文件读写, pathlib 库中还提供了几个方便的方法

  • .read_text():以文本模式打开path对象, 并返回字符串数据。
  • .read_bytes():以二进制模式打开path对象, 并返回字节数据。
  • .write_text(): 以文本模式打开path对象, 并写入字符串数据。
  • .write_bytes():以二进制模式打开path对象, 并写入字节数据。
In [10]: data_file.read_text()
Out[10]: 'testdata'

In [11]: data_file.write_text('aloha')
Out[11]: 5

In [12]: data_file.read_text()
Out[12]: 'aloha'

2.3 路径的属性

路径的不同部分可以方便地作为属性使用. 

  • .name         文件名
  • .parent       当前文件或目录的父目录
  • .stem         不带后缀的文件名
  • .suffix        文件扩展名
  • .anchor     目录的锚点, (路径前的目录部分)
In [13]: data_file
Out[13]: WindowsPath('C:/Users/Public/Documents/data.txt')

In [14]: data_file.name
Out[14]: 'data.txt'

In [15]: data_file.stem
Out[15]: 'data'

In [16]: data_file.suffix
Out[16]: '.txt'

In [17]: data_file.anchor
Out[17]: 'C:\\'

In [18]: data_file.parent
Out[18]: WindowsPath('C:/Users/Public/Documents')

2.4 移动和删除文件

要移动文件, 可以使用 .replace() 方法, 需要注意的是, 如果目的地址的文件已经存在, .replace() 将会覆盖它. 使用pathlib 实现要移动当前目录下的txt文件到备份目录代码如下.

In [19]: cwd = pathlib.Path.cwd()

In [20]: for p in cwd.glob('*.txt'):
    ...:     p.replace(p.parent/'backup'/p.name)

如果需要重命名文件或者拓展名, 可以使用 .with_name() 和 .with_suffix()

In [21]: data_file
Out[21]: WindowsPath('C:/Users/Public/Documents/data.txt')

In [22]: data_file.with_name(data_file.stem+'01').with_suffix('.txt.bak')
Out[22]: WindowsPath('C:/Users/Public/Documents/data01.txt.bak')

3. 操作系统的差异

windows系统使用的文件路径分割符是 '/'  linux和mac系统使用的文件路径分割符是 '\' . 

当我们示例化一个pathlib.Path对象时, 根据操作系统的不同, 返回的时是 一个 WindowsPath, 或一个 PosixPath 对象. 这个特性使得编写跨平台兼容的代码变得相当容易.  当然也可以显式的使用 pathlib.WindowsPath.cwd() 来创建 WindowsPath 对象. 

此外, pathlib还提供了提供纯计算操作而没有 I/O 的 纯路径对象.  各个路径的关系如下:

 

在一些用例中纯路径很有用,例如:

  1. 如果你想要在 Unix 设备上操作 Windows 路径(或者相反)。你不应在 Unix 上实例化一个 WindowsPath,但是你可以实例化  PureWindowsPath。

  2. 你只想操作路径但不想实际访问操作系统。在这种情况下,实例化一个纯路径是有用的,因为它们没有任何访问操作系统的操作。

4. 结论

pathlib 返回路径对象而不是字符串, 提供更加简洁的与路径文件交互的方式

  • 更加友好, 可直接使用 '/' 连接路径
  • 提供更加简便的读写文件的方式
  • 路径对象有很多常用的方法和属性
  • 操作系统兼容性更好
使用pathlib如何将文件从一个文件夹移动到另一个,并修改文件后缀名称 将source_dir文件夹下面的所有.txt文件的后缀修改为.java后,移动到target_dir,并且保持原先的所有.txt文件不动。 阅读详情

相关推荐

Python文件路径操作:os.path与pathlib模块详解

文件路径操作是编程中的基础技能,涉及文件系统的定位与访问。Python提供了os.path和pathlib两种处理方式,前者基于字符串函数式操作,后者采用面向对象设计。理解路径拼接、存在性检查、目录遍历等核心操作,能有效提升数据处理和自动化脚本的可靠性。在深度学习等场景中,高效的路径操作尤为关键,如批量处理图像数据集时,合理使用pathlib的rglob方法可简化递归文件查找。掌握这些技术不仅能优化代码结构,还能避免跨平台兼容性问题,是Python工程实践的必备技能。

weixin_33508411的博客 322

Python文件路径处理之pathlib模块

pathlib模块为Python中的路径操作提供了一个更加现代和面向对象的API。通过使用Path对象的方法和属性,可以轻松地执行各种路径操作,使得代码更加清晰和易于理解。无论是读取文件、遍历目录还是执行文件操作,pathlib都是一个非常强大且方便的工具。

专注于Python编程技术的分享与交流,致力于帮助开发者提升编程技能,解决实际问题,探索Python的无限可能。 5362

python文件移动的方法

python移动文件

NLP与推荐算法 3244

Python中的pathlib库

Python中的pathlib库,包含from pathlib import Path和import os以及os.path

Le0v1n 的博客 3981

成本150元的高性能RDP协议瘦客户机

云终端市场是一个跨度很大的市场。既有数千元的品牌的瘦客户机,也有几百元的瘦客户机,还有200-300元的支持RDP协议的多用户云终端。但是200-300元的多用户终端,在显示性能上不尽人意,一般用于地产中介门店,工厂产线的电子看板等场合。有没有性能更好,价格更低的方案呢? 答案是有。 这个方案就是 二手的x86 瘦客户机 + DoraOS瘦客户机系统免费版(仅支持RDP)。 首先我们看硬件,在某宝搜索 升腾C92 ,找到最低配置的( CPU:J1800,内存:2G,硬盘:8G)。价格都在150以内。

云飞扬的桌面云 7412

【论文翻译】VIT:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

VIT摘要介绍相关工作模型VISION TRANSFORMER (VIT)微调和高分辨率实验结论 摘要 虽然Transformer架构在自然语言处理任务中已经成为事实标准,但是它在计算机视觉领域的应用仍然受限。在视觉领域,注意力要么和卷积网络结合使用,要么替换卷积网络中的某些部分,同时保持整体结构不变。本文表明对CNNs的依赖不是必要的,纯转换器(pure transformer)直接应用于图像块(image patches)序列在图像分类任务中能发挥很好的作用。当对大量数据进行预训练并把它转移到多个中型或

栗子菜菜 1846

Python3的pathlib模块:驯服文件系统

目录 python文件路径处理时的问题 创建路径 读写文件 找出路径的组成部分 移动和删除文件 例子 计算文件数量 显示目录树 查找上次修改的文件 创建唯一的文件名 操作系统的差别 以合适的对象表现路径 结论 你是否遇到过使用python处理文件路...

weixin_33711647的博客 83

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

python os.path.splitext()的用法_你应该使用pathlib替代os.path

原标题:你应该使用pathlib替代os.path在Python 3.4之前和路径相关操作函数都放在os模块里面,尤其是 os.path这个子模块,可以说 os.path模块非常常用。而在Python 3.4,标准库添加了新的模块 - pathlib,它使用面向对象的编程方式来表示文件系统路径。作为一个从Python 2时代过来的人,已经非常习惯使用os,那么为什么我说「应该使用pathlib替代...

weixin_39633113的博客 790

InsightFace(RetinaFace + ArcFace)人脸识别实战:从模型部署到Web服务构建

本文详细介绍了如何利用InsightFace框架,结合其集成的RetinaFace人脸检测与ArcFace人脸识别预训练模型,从零开始构建一个高性能的Web人脸识别服务。内容涵盖环境搭建、模型部署、核心代码解析(包括五点仿射对齐关键步骤)、FAISS向量检索集成以及基于FastAPI的Web服务开发,并提供了实战优化与常见问题排查指南,帮助开发者快速实现工业级应用。

weixin_29054245的博客 227

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

Python 3 pathlib处理各平台文件路径的窍门

编程的一个小麻烦之一是:Microsoft Windows在文件夹名称之间使用反斜杠字符,而几乎所有其他计算机都使用正斜杠: Python Windows filenames: C:\some_folder\some_file.txt Most other operating s...

从零开始学习python --zeropython 299

TSMC40nmLP版图实战:从Design Rule解读到Cadence高效布局布线

本文详细解析了TSMC40nmLP工艺的版图设计实战,从Design Rule解读到Cadence高效布局布线技巧。重点介绍了40nm工艺中的关键设计规则,如最小线宽、间距规则和深N阱规则,并分享了Cadence Virtuoso中的高效工作流和射频模块设计技巧,帮助工程师提升版图设计效率和质量。

weixin_29250403的博客 378

Python 文件路径处理神器:pathlib 模块详解

pathlib模块是 Python 3.4 及以上版本引入的标准库,它基于面向对象的思想,将文件系统路径抽象为对象,通过对象的属性和方法来完成路径的各种操作。pathlib模块支持不同操作系统的路径格式,自动处理路径分隔符的差异,使得代码在不同平台上具有更好的兼容性。pathlib模块为 Python 开发者提供了一种简洁、高效、面向对象的方式来处理文件系统路径。通过Path和PurePath等类,我们可以轻松完成路径的创建、判断、操作、遍历等任务,同时避免了传统字符串路径处理的诸多问题。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 4273

PyTorch实战(25)——使用PyTorch构建DQN模型

深度Q网络 (Deep Q-learning Network, DQN) 在强化学习领域取得了巨大的成功和广泛的应用,PyTorch 结合 gymnasium 库为我们提供了强大的工具,支持在各种强化学习环境中测试不同类型的深度强化学习模型。在本节中,我们使用 PyTorch 框架构建使用卷积神经网络架构的 DQN 模型,模型通过自主学习掌握 Atari 经典游戏《Pong》的操作策略,最终实现击败电脑对手的竞技目标。

盼小辉丶的博客 3485

基于GA-BP遗传算法优化神经网络的多输入多输出数据预测-Python代码实现

多输入多输出的GA-BP神经网络

2301_80449389的博客 2308

Python pathlib模块详解:优雅处理文件路径

更多Python学习内容:ipengtao.com在Python中,pathlib模块提供了一种优雅而直观的方式来处理文件路径和文件系统操作。本文将深入探讨pathlib模块的使用方法、常用类和方法、路径操作技巧以及示例代码,帮助更好地理解和应用路径处理功能。pathlib模块简介pathlib模块是Python 3.4及以上版本中引入的标准库,用于处理文件路径和文件系统操作。它提供了一种面向对象...

GitHub_miao的博客 1229

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python路径操作库pathlib,比os+glob+shutil更好用

比os、glob和shutil好用,操作简便快捷易理解

XerCis的博客 7992

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Python基础】一文搞懂:Python中文件路径的处理方式

在 Python 编程中,正确处理文件路径是一个常见且重要的任务。无论是数据分析、文件操作还是系统编程,高效且准确地处理文件路径都至关重要。Python 提供了多个内置模块来简化文件路径的处理,包括 `os` 和 `pathlib` 模块。本文将深入探讨这些模块的使用方法,帮助你轻松掌握文件路径的处理技巧。

climber1121的博客 4937

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python怎么处理路径_用pathlib进行Python中的文件路径处理

本文介绍Python中的文件路径处理方法,从字符串连接、os.path.join()到Python3中处理文件路径的简单方法:pathlib。1. 通过字符串连接import pandas as pdparent_path = 'parent_path/'target_path = 'target_path/'target_file = 'target.csv'full_path = parent...

weixin_39753791的博客 523

pathlib安装_pathlib介绍-比os.path更好的路径处理方式

我们先来聊下三种操作系统windows、Mac 和 Linux,Windows filenames: C:some_foldersome_file.txt Most other operating systems: /some_folder/some_file.txt如上所示,带来的一个编程小麻烦就是不同的操作系统,文件连接所用正反斜线是不一致的。这是一个有趣的历史:early 1980’s co...

weixin_39926042的博客 2651

Python 文件路径操作(os 和 pathlib)

在 Python 中,文件路径的操作是日常开发中不可或缺的一部分。`os` 模块和 `pathlib` 模块都提供了强大的工具来处理文件路径,但 `pathlib` 的现代设计使其成为首选。通过本文的学习,希望你能更好地掌握这两种模块的使用方法,并在未来的项目中灵活运用。```

2501_91164012的博客 414

Python 处理文件路径(os.path 与 pathlib)

在现代 Python 开发中,推荐使用pathlib来处理文件路径,因为它提供了更直观的 API 和更好的可读性。然而,如果你需要兼容旧版本的 Python 或者已经在项目中广泛使用os.path,那么继续使用os.path也是完全可以的。无论选择哪种方式,确保你的代码能够正确处理不同操作系统上的路径差异是非常重要的。```

2501_91142274的博客 874

pathlib介绍-比os.path更好的路径处理方式

文章来源:https://zhuanlan.zhihu.com/p/33524938 我们先来聊下三种操作系统windows、Mac 和 Linux, Windows filenames: C:\some_folder\some_file.txt Most other operating systems: /some_folder/some_file.txt 如上所示,带来的一个编程小...

急流勇进 1141
上一篇: Python中with语句详解, 2种方式创建自定义的上下文管理器
下一篇: Python 如何写干净的代码 Clean-Code
be5yond
博客等级 码龄10年 590粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值