【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)
注意事项
pathlib
在 Python 3.6+ 中性能更好,功能更完整- 对于需要处理大量文件的操作,
os
模块可能更快 Path
对象是不可变的,所有修改操作都会返回新对象- 在 Windows 上,
pathlib
会自动处理正反斜杠问题
希望这个教程能帮助你掌握 pathlib
的基本用法!