← [ BACK_TO_NOTES ]

Python 路径与文件 IO

pathlib.Path 提供面向对象路径操作;文本/字节读写配合上下文管理器与编码。

#concept #growing #dev #python #python

[!info] related notes

Python 路径与文件 IO

这个概念为什么出现

字符串拼路径易错且跨平台脆。pathlib 把路径当对象;读写必须处理编码与资源关闭。

[!abstract] 一句话理解 用 Path 组合/查询路径,用 read_text/write_text 或 open 上下文做 IO,并显式 encoding。

最小可运行示例

场景:导出对账文件到临时目录

# pathlib_export_demo.py
# 业务意图:写入 UTF-8 对账文件并读回。
# 教学点:Path;write_text;exists。

from pathlib import Path
from tempfile import TemporaryDirectory


def export_report(dir_path: Path, content: str) -> Path:
    dir_path.mkdir(parents=True, exist_ok=True)
    target = dir_path / "report.txt"
    target.write_text(content, encoding="utf-8")
    return target


def main() -> None:
    with TemporaryDirectory(prefix="py-report-") as temp_dir:
        path = export_report(Path(temp_dir), "ok,金额,12\n")
        print("file:", path.name)
        print("exists:", path.exists())
        print("body:", path.read_text(encoding="utf-8").strip())


if __name__ == "__main__":
    main()

建议运行:

python pathlib_export_demo.py

期望输出:

file: report.txt
exists: True
body: ok,金额,12

结合场景再看三个关注点

  1. / 运算符拼路径;右侧绝对路径会覆盖前面的根,.. 和符号链接也不自动受限,不能把拼接当作目录隔离。
  2. encoding 显式;write_text 会覆盖已有文件,且不是原子写。本例用临时目录隔离并在退出时清理。
  3. 大文件用流式迭代。

核心概念与准确模型

  • Path / PurePath
  • 文本 vs 字节 API
  • with path.open()
  • 权限与存在性检查竞态

边界情况与反直觉行为

  1. TOCTOU 检查后删除
  2. 换行符 通用换行模式
  3. 符号链接

常见误区

[!warning] 常见误区:到处 + "/" 拼路径 错误理解:字符串足够。
正确模型:Path 处理分隔与语义。

工程实践

  • 配置根目录注入
  • 临时文件用 tempfile
  • 需原子替换时,将临时文件写在目标同一文件系统(通常同目录)并关闭,再 replace;原子可见性不等于断电持久性,后者还需平台相应的同步协议。

本节总结

路径对象化 + 编码显式 + with 关闭,是文件 IO 的默认正确姿势。

自测题

  1. write_text 默认会怎样关于编码?
  2. 为何大文件不 read_text?
参考答案
  1. 应显式传 encoding(避免平台默认差异)。
  2. 内存占用;应流式读。

延伸阅读与资料来源

资料类型支撑内容
pathlib文档路径
open文档打开文件
创建于 2026/7/15 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本