Python 路径管理新纪元:pathlib 模块带你玩转文件系统

devtools/2024/9/25 14:25:53/

引言

在早期的 Python 版本中,处理文件路径往往需要依赖于 osos.path 模块,虽然它们功能强大,但复杂的 API 设计使得代码可读性较差。随着 Python 3.4 的发布,pathlib 模块正式登场,它以对象导向的方式简化了路径操作,使得代码更加直观易懂。本文旨在通过一系列实例帮助你快速上手 pathlib,无论你是初学者还是资深开发者,都能从中获益匪浅。

基础语法介绍

pathlib 主要有两个核心类:PathPurePath。其中 Path 是用于实际文件系统交互的类,而 PurePath 则仅用于路径的组合与解析,不涉及任何磁盘访问。

创建路径对象

python">from pathlib import Path# 绝对路径
p = Path('/home/user/documents')
print(p)# 相对路径
p = Path('data/logs.txt')
print(p)

路径操作

  • 获取父目录p.parent
  • 获取根目录p.root
  • 获取文件名p.name
  • 拼接路径p / 'subfolder'
python"># 示例
p = Path('/home/user/documents/report.txt')
print(p.parent)  # 输出: PosixPath('/home/user/documents')
print(p.stem)    # 输出: report
print(p.suffix)  # 输出: .txt

基础实例

假设我们需要创建一个目录,并在其中写入一些测试文件。

python">import os
from pathlib import Path# 创建目录
output_dir = Path('output')
output_dir.mkdir(exist_ok=True)# 写入文件
test_file = output_dir / 'hello.txt'
test_file.write_text('Hello, world!', encoding='utf-8')# 读取文件
content = test_file.read_text(encoding='utf-8')
print(content)  # 输出: Hello, world!

进阶实例

当涉及到更复杂的文件系统操作时,如递归遍历目录、筛选特定类型的文件等,pathlib 同样表现得游刃有余。

递归遍历目录

python"># 遍历当前目录及其子目录下所有.py 文件
for p in Path('.').rglob('*.py'):print(p)

文件过滤

python"># 只打印文件大小超过1KB的.py 文件
for p in Path('.').rglob('*.py'):if p.stat().st_size > 1024:print(f'{p} - {p.stat().st_size} bytes')

实战案例

在实际项目中,pathlib 的优势更加明显。比如,在构建自动化部署脚本时,我们需要处理不同环境下的配置文件路径差异。

python"># 根据环境变量确定配置文件位置
env = os.environ.get('ENV', 'dev')
config_path = Path(f'/etc/configs/{env}.conf')if config_path.exists():print(f'Using config file at {config_path}')
else:print(f'Config file not found: {config_path}')

扩展讨论

除了上述基本功能外,pathlib 还支持更多高级特性,如符号链接管理、异步 I/O 操作等。随着你对它的深入了解,你会发现 pathlib 几乎可以满足你在文件系统操作方面的一切需求。希望今天的分享能够为你打开一扇新的大门,让 Python 编程之旅更加轻松愉快!


http://www.ppmy.cn/devtools/117004.html

相关文章

Arthas vmoption(查看和修改 JVM里诊断相关的option)

文章目录 二、命令列表2.1 jvm相关命令2.1.6 vmoption(查看和修改 JVM里诊断相关的option)举例1:vmoption 查看所有的选项举例2:vmoption MinHeapFreeRatio 查看指定的选项 二、命令列表 2.1 jvm相关命令 2.1.6 vmoption&#x…

list模拟实现(部分)

1.没有实现const迭代器。 #include<iostream> using namespace std; namespace test {template<class T>struct list_node {T _val;list_node<T> * _prev;list_node<T> * _next;list_node(const T& val T()) :_val(val), _prev(nullptr), _next…

COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件

COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件 主要功能介绍 支持 IEEE Std C37.111-1991/1999/2013 规范。读取 ASCII 或二进制 COMTRADE 文件。查看来自 COMTRADE 配置文件的模拟和数字通道列表。将图表导出为 SVG、BMP、JPEG 和 PNG 图形格式。将显示的观察结果以 C…

算法打卡:第十一章 图论part03

今日收获&#xff1a;孤岛的总面积&#xff0c;沉没孤岛&#xff0c;水流问题&#xff0c;建造最大岛屿 1. 孤岛的总面积 题目链接&#xff1a;101. 孤岛的总面积 思路&#xff1a;只要岛屿中有一个节点是边缘节点&#xff0c;那么这个岛屿就不是孤岛&#xff0c;结果不累加…

[python-pdal]python-pdal安装后测试代码

测试代码&#xff1a; import pdal import tiledbdata "1.2-with-color.las"pipeline pdal.Reader.las(filenamedata).pipeline() print(pipeline.execute()) # 1065 points# Get the data from the first array # [array([(637012.24, 849028.31, 431.66, 143, …

Oracle 物化视图创建(materialized)

要想创建 “物化视图&#xff0c;至少具有 ‘CREATE MATERIALIZED VIEW’ 权限” -- 权限查询&#xff0c;非 DBA 用户&#xff0c;则使用 user_sys_privs 即可 SELECT * FROM dba_sys_privs t WHERE t.privilege LIKE %MATERIALIZED%; grant create materialized view to sco…

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目&#xff0c;包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题&#xff0c;可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

智能养殖场人机交互检测系统源码分享

智能养殖场人机交互检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…