0.前言
pathlib
模块是Python3中用于面向对象的文件系统路径操作的模块。它提供了Path类
来进行路径相关的操作。使用pathlib
可以以更直观和易于理解的方式处理文件路径和文件。本文主要介绍新模块pathlib
和老模块os.path
对文件路径相关操作的区别。
1.os.path相关操作
import os
# 拼接路径
path = os.path.join('/home', 'user', 'docs', 'file.txt')
# 获取当前文件的绝对路径
abs_path = os.path.abspath('my_file.txt')
# 将路径分割成目录和文件名
dir_name, file_name = os.path.split('/home/user/docs/file.txt')
# 分离文件名和扩展名
root, ext = os.path.splitext('/home/user/docs/file.txt')
# 检查路径是否存在
exists = os.path.exists('/home/user/docs')
# 检查是否是绝对路径
is_absolute = os.path.isabs('/home/user/docs')
# 检查是否是文件
is_file = os.path.isfile('/home/user/docs/file.txt')
# 检查是否是目录
is_dir = os.path.isdir('/home/user/docs')
# 获取路径的目录部分
dirname = os.path.dirname('/home/user/docs/file.txt')
# 获取路径的最后一部分(文件名或最后一级目录名)
basename = os.path.basename('/home/user/docs/file.txt')
# 标准化路径,解决多余的分隔符和上级引用等问题
norm_path = os.path.normpath('/home//user/docs/../file.txt')
# 获取文件大小
file_size = os.path.getsize('/home/user/docs/file.txt')
# 获取文件的最后修改时间
mod_time = os.path.getmtime('/home/user/docs/file.txt')
# 检查两个路径是否指向同一个文件
samefile = os.path.samefile('/path/to/file1', '/path/to/file1_symlink')
2.pathlib相关操作
创建Path对象
from pathlib import Path
# 创建指向当前目录的Path对象
p = Path('.')
# 创建指向特定文件或目录的Path对象
p = Path('/usr/bin/python3')
# 使用home方法获取用户的家目录
home_path = Path.home()
路径拼接
# 在Path对象后面拼接路径
new_p = p / 'lib' / 'python3.9'
路径解析和属性
# 获取绝对路径
p.resolve()
# 获取父目录
p.parent
# 获取路径的最后一部分
print(p.name)
# 获取不含后缀的文件名
p.stem
# 获取文件的后缀
p.suffix
# 获取所有父目录
list(p.parents)
检查路径
# 检查路径是否存在
p.exists()
# 检查是否是文件
p.is_file()
# 检查是否是目录
p.is_dir()
# 检查是否是绝对路径
p.is_absolute()
文件操作
# 读写文件(Path对象需要转换为字符串或使用open方法)
with p.open('r', encoding='utf-8') as f:
content = f.read()
# 或者
content = (p / 'some_file.txt').read_text(encoding='utf-8')
# 写入文件
(p / 'output.txt').write_text("Hello, pathlib!", encoding='utf-8')
# 删除文件
(p / 'to_be_deleted.txt').unlink()
目录操作
# 列出目录下所有文件和目录
list(p.iterdir())
# 创建新目录
(p / 'new_dir').mkdir(parents=True, exist_ok=True)
# 删除空目录
(p / 'empty_dir').rmdir()
# 迭代特定模式的文件和目录
for py_file in p.glob('**/*.py'):
print(py_file)
路径移动和重命名
# 重命名文件或目录
p.rename('new_name')
# 移动文件或目录
p.replace('path/to/new_location')
3.总结
pathlib
模块相对于os.path
模块在处理文件路径时具有多项优势,增强了文件操作性,面向对象的特点使其代码的可读性和可维护性更高,在现代Python编程中成为处理文件路径的推荐选择。