跳转至

pathlib 模块

Python pathlib 模块详解

pathlib 是 Python 3.4 引入的一个标准库模块,它提供了面向对象的文件系统路径操作方法。相比于传统的 os.path 模块,pathlib 更加直观和强大,适用于文件和目录的创建、读取、修改、删除等操作。

1. 基本概念

pathlib 模块引入了 Path 类,该类表示文件系统路径。根据不同的操作系统,pathlib 会自动处理路径分隔符问题,使代码更具跨平台性。

from pathlib import Path

# 创建一个 Path 对象
p = Path('/usr/bin')

2. 创建路径对象

  • 绝对路径: 直接传入绝对路径。
p = Path('/usr/bin')
  • 相对路径: 传入相对路径,路径将相对于当前工作目录。
p = Path('my_folder/my_file.txt')
  • 当前目录: 使用 Path.cwd() 获取当前工作目录。
current_dir = Path.cwd()
  • 家目录: 使用 Path.home() 获取当前用户的家目录。
home_dir = Path.home()

3. 路径操作

  • 获取路径的各部分:
p = Path('/usr/bin/python3')

print(p.name)        # 文件名: python3
print(p.parent)      # 父目录: /usr/bin
print(p.stem)        # 文件名不带扩展名: python3
print(p.suffix)      # 文件扩展名: .3
print(p.parts)       # 路径的所有部分: ('/', 'usr', 'bin', 'python3')
  • 组合路径: 使用 / 操作符组合路径。
p = Path('/usr') / 'bin' / 'python3'
print(p)  # 输出: /usr/bin/python3
  • 检查路径: 使用各种方法检查路径的状态。
p = Path('/usr/bin/python3')

print(p.exists())      # 检查路径是否存在
print(p.is_file())     # 检查是否为文件
print(p.is_dir())      # 检查是否为目录
print(p.is_absolute()) # 检查是否为绝对路径

4. 文件操作

  • 读取文件内容: 使用 read_text()read_bytes() 读取文件内容。
p = Path('example.txt')

content = p.read_text(encoding='utf-8')  # 读取文本文件
binary_data = p.read_bytes()             # 读取二进制文件
  • 写入文件内容: 使用 write_text()write_bytes() 写入文件。
p = Path('example.txt')

p.write_text('Hello, World!', encoding='utf-8')  # 写入文本文件
p.write_bytes(b'binary data')                    # 写入二进制文件
  • 创建文件和目录: 使用 touch() 创建文件,mkdir() 创建目录。
p = Path('new_file.txt')
p.touch()  # 创建一个空文件

p = Path('new_folder')
p.mkdir(parents=True, exist_ok=True)  # 创建目录,自动创建父目录
  • 删除文件和目录: 使用 unlink() 删除文件,rmdir() 删除空目录。
p = Path('new_file.txt')
p.unlink()  # 删除文件

p = Path('new_folder')
p.rmdir()   # 删除空目录

5. 遍历目录

  • iterdir(): 用于遍历目录中的内容。
p = Path('.')
for entry in p.iterdir():
    print(entry.name)  # 打印当前目录下的所有文件和目录
  • glob()rglob(): 支持通配符匹配,rglob() 可以递归匹配。
p = Path('.')
for txt_file in p.glob('*.txt'):
    print(txt_file.name)  # 匹配当前目录下的所有 .txt 文件

for py_file in p.rglob('*.py'):
    print(py_file.name)  # 递归匹配当前目录及子目录下的所有 .py 文件

6. 路径比较与相对路径

  • 比较路径: 可以直接比较 Path 对象。
p1 = Path('/usr/bin/python3')
p2 = Path('/usr/bin/python3')

print(p1 == p2)  # 输出: True
  • 获取相对路径: 使用 relative_to() 方法。
p1 = Path('/usr/bin/python3')
p2 = Path('/usr')

print(p1.relative_to(p2))  # 输出: bin/python3
  • 获取路径之间的相对路径:
p1 = Path('/usr/bin/python3')
p2 = Path('/usr/local/bin')

print(p1.relative_to(p2))  # 输出: ../local/bin

总结

pathlib 模块为文件路径操作提供了更加直观和强大的工具。通过面向对象的方法,它使得路径操作更加清晰和易于理解。对于涉及文件和目录的任务,pathlib 是一个非常推荐的模块。