pathlib
是 Python 3.4+ 引入的用于处理文件系统路径的模块,提供面向对象的路径操作。以下是其核心类 Path
的主要方法及实际示例:
1. 构造路径
Path()
: 创建路径对象(自动适配操作系统)。/
运算符: 拼接路径。from pathlib import Path # 直接构造路径 p = Path("/home/user/data") # 使用运算符拼接 config_path = Path("config") / "settings.yaml" # 输出:config/settings.yaml
2. 路径属性与检查
-
.exists()
: 检查路径是否存在。 -
.is_file()
/.is_dir()
: 判断是文件还是目录。 -
.name
: 文件名(含后缀)。 -
.stem
: 文件名(不含后缀)。 -
.suffix
: 文件后缀。 -
.parent
: 父目录路径。file = Path("data/report.txt") if file.exists(): print(f"是文件: {file.is_file()}") # 输出:True print(file.name) # report.txt print(file.stem) # report print(file.suffix) # .txt print(file.parent) # data
3. 文件读写
.read_text()
/.read_bytes()
: 读取文本/二进制内容。.write_text()
/.write_bytes()
: 写入内容。# 读取配置文件 config = Path("config/settings.json").read_text(encoding="utf-8") # 写入日志 log_path = Path("logs/app.log") log_path.write_text("2023-10-01 INFO: System started\n", encoding="utf-8")
4. 目录操作
.mkdir(parents=True, exist_ok=True)
: 创建目录(自动处理父目录)。.iterdir()
: 遍历目录内容。# 创建目录(若父目录不存在,自动创建) Path("data/raw").mkdir(parents=True, exist_ok=True) # 遍历目录中的文件 for child in Path("data").iterdir(): print(child.name) # 输出所有子文件和子目录名
5. 路径处理
.resolve()
: 获取绝对路径(解析符号链接)。.with_name()
/.with_suffix()
: 修改文件名或后缀。# 获取绝对路径 abs_path = Path("data/report.txt").resolve() # 如 /home/user/data/report.txt # 修改文件后缀 new_path = abs_path.with_suffix(".csv") # report.csv
6. 通配符匹配
.glob(pattern)
/.rglob(pattern)
: 匹配文件(支持递归)。# 查找当前目录下所有 .txt 文件 for txt_file in Path("data").glob("*.txt"): print(txt_file) # 递归查找所有 .py 文件 for py_file in Path("src").rglob("*.py"): print(py_file)
7. 其他实用方法
-
.stat()
: 获取文件信息(如大小、修改时间)。 -
.rename(target)
: 重命名或移动文件。 -
.unlink()
: 删除文件。 -
.touch()
: 创建空文件。# 获取文件信息 stats = Path("data/report.txt").stat() print(f"大小: {stats.st_size} 字节") # 重命名文件 Path("old_name.txt").rename("new_name.txt") # 删除文件 Path("tmp/temp_file").unlink()
实际场景示例
场景:批量修改图片后缀
image_dir = Path("images")
for img in image_dir.glob("*.jpg"):
new_name = img.with_suffix(".png")
img.rename(new_name)
print(f"重命名: {img.name} -> {new_name.name}")
场景:读取 CSV 文件并处理
data_path = Path("data/sales.csv")
if data_path.exists() and data_path.is_file():
content = data_path.read_text(encoding="utf-8")
rows = content.splitlines()
# 进一步处理数据...
总结
pathlib
的优势:
- 面向对象:路径作为对象操作,代码更直观。
- 跨平台:自动处理 Windows/Unix 路径差异。
- 链式调用:支持如
Path("data").joinpath("raw").mkdir()
的简洁写法。
通过结合这些方法,可以高效处理文件系统任务,替代传统的 os.path
和 os
模块。