当前位置: 首页 > news >正文

【pathlib 】Python pathlib 库教程

Python pathlib 库教程

pathlib 是 Python 3.4+ 引入的一个用于处理文件系统路径的面向对象库,它比传统的 os.path 更直观易用。

基本概念

Path 对象

pathlib 的核心是 Path 类,它表示文件系统的路径。

from pathlib import Path

创建 Path 对象

# 当前目录
p = Path()  # 或 Path('.')# 绝对路径
p = Path('/home/user/documents')# 相对路径
p = Path('docs/readme.txt')# Windows路径 (会自动处理正反斜杠)
p = Path('C:/Windows/System32')

常用操作

路径拼接

# 使用 / 运算符拼接路径
p = Path('/home') / 'user' / 'documents' / 'file.txt'# 使用 joinpath 方法
p = Path('/home').joinpath('user', 'documents', 'file.txt')

获取路径信息

p = Path('/home/user/docs/readme.txt')p.name       # 'readme.txt' (文件名+后缀)
p.stem       # 'readme' (文件名)
p.suffix     # '.txt' (后缀)
p.parent     # Path('/home/user/docs') (父目录)
p.parts      # ('/', 'home', 'user', 'docs', 'readme.txt')
p.anchor     # '/' (根目录部分)
p.as_posix() # '/home/user/docs/readme.txt' (转为正斜杠格式)
p.as_uri()   # 'file:///home/user/docs/readme.txt' (转为URI)

检查路径

p = Path('some_file.txt')p.exists()   # 路径是否存在
p.is_file()  # 是否是文件
p.is_dir()   # 是否是目录
p.is_absolute()  # 是否是绝对路径

文件操作

# 创建文件
p = Path('new_file.txt')
p.touch()  # 创建空文件# 写入文件
p.write_text('Hello, world!')  # 写入文本
p.write_bytes(b'some binary data')  # 写入二进制# 读取文件
content = p.read_text()  # 读取文本
data = p.read_bytes()    # 读取二进制# 删除文件
p.unlink()

目录操作

# 创建目录
p = Path('new_dir')
p.mkdir()  # 创建单个目录
p.mkdir(parents=True, exist_ok=True)  # 创建多级目录,且目录已存在时不报错# 遍历目录
for child in p.iterdir():  # 遍历目录内容print(child)# 递归遍历所有文件和子目录
for file in p.glob('**/*'):  # 或 p.rglob('*')print(file)# 删除目录 (目录必须为空)
p.rmdir()

路径解析

p = Path('/home/user/docs/../pictures/./photo.jpg')p.resolve()  # 解析为绝对路径,去除 '.' 和 '..'
# 例如: /home/user/pictures/photo.jpgp.absolute()  # 转为绝对路径,但不解析符号链接或 '..'

其他实用方法

# 更改文件后缀
p = Path('document.txt')
p.with_suffix('.pdf')  # Path('document.pdf')# 更改文件名
p.with_name('new_name.txt')  # Path('new_name.txt')# 获取家目录
Path.home()  # 例如: Path('/home/user')# 获取当前工作目录
Path.cwd()

实际示例

示例1: 统计目录下所有.py文件的行数

from pathlib import Pathdef count_py_lines(directory):path = Path(directory)total_lines = 0for py_file in path.rglob('*.py'):try:lines = len(py_file.read_text().splitlines())print(f"{py_file}: {lines} lines")total_lines += linesexcept Exception as e:print(f"Error reading {py_file}: {e}")print(f"\nTotal lines: {total_lines}")count_py_lines('.')

示例2: 整理下载文件夹

from pathlib import PathDOWNLOADS = Path.home() / 'Downloads'# 按扩展名创建目录并移动文件
for item in DOWNLOADS.iterdir():if item.is_file():ext = item.suffix[1:]  # 去掉点if ext:target_dir = DOWNLOADS / exttarget_dir.mkdir(exist_ok=True)item.rename(target_dir / item.name)

注意事项

  1. pathlib 在 Python 3.6+ 中性能更好,功能更完整
  2. 对于需要处理大量文件的操作,os 模块可能更快
  3. Path 对象是不可变的,所有修改操作都会返回新对象
  4. 在 Windows 上,pathlib 会自动处理正反斜杠问题

希望这个教程能帮助你掌握 pathlib 的基本用法!

http://www.dtcms.com/a/263843.html

相关文章:

  • 成都芯谷金融中心文化科技园:打造区域科技活力
  • nginx配置websocket
  • 用java,把12.25.pdf从最后一个点分割,得到pdf
  • Elastic 构建 Elastic Cloud Serverless 的历程
  • CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
  • 61、【OS】【Nuttx】【构建】向量表
  • Redis-7.4.3-Windows-x64下载安装使用
  • 浅谈Docker Kicks in的应用
  • ‌Webpack打包流程
  • 为什么时序数据库IoTDB选择Java作为开发语言
  • Milvus docker-compose 部署
  • t检验​、​z检验、χ²检验中的P值
  • Vue3 使用 i18n 实现国际化完整指南
  • 浏览器F12开发者工具的使用
  • 大模型MCP技术之一句话安装Hadoop
  • DML-2-更新和删除
  • Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?
  • JavaWeb笔记02
  • hello算法_C++_ 最差、最佳、平均时间复杂度
  • Spring事务传播行为?失效情况?(详解)
  • 设计模式精讲 Day 20:状态模式(State Pattern)
  • imx6ull芯片中断机制6.24-6.25
  • Python中字符串isalpha()函数详解
  • 设计模式-责任链, 责任链+ 模板方法模式相结合
  • 抽奖概率-数值练习题
  • AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
  • 【Golang面试题】Go结构体的特点,与其它语言的区别
  • 学习昇腾开发的第11天--主要接口调用流程
  • 逐步构建高性能http服务器及聊天室服务器
  • 青否数字人直播再创新纪录!“人工智能+消费”开新篇?zhibo175