J'Blog

12 课 · 日常

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

pathlib 面向对象路径操作

原文:pathlib 路径

一句话

pathlib 提供面向对象的文件系统路径操作,替代传统的字符串路径处理。

什么时候翻这页

  1. Agent 需要处理文件系统路径,如读取配置文件、日志文件等
  2. 工具调用中需要操作文件系统,如保存、读取或处理文件
  3. 需要跨平台处理路径,确保代码在不同操作系统上正常工作
  4. Agent 需要遍历目录结构,查找特定类型的文件

核心概念

  1. 纯路径(PurePath):不进行实际文件系统操作的路径类,包括 PurePathPurePosixPathPureWindowsPath
  2. 具体路径(Path):继承自纯路径,增加了文件系统操作能力,包括 PathPosixPathWindowsPath
  3. 路径操作:使用 / 运算符拼接路径,支持路径解析和规范化
  4. 路径属性:提供 namestemsuffixparentparts 等属性访问路径的各个部分
  5. 文件系统操作:包括文件和目录的创建、读取、写入、删除、移动等操作

怎么做

  1. 基本使用

    from pathlib import Path
    
    # 创建路径对象
    p = Path('.')
    home = Path.home()
    cwd = Path.cwd()
    
    # 路径拼接
    config = Path('/etc') / 'config.ini'
    
    # 检查路径存在性
    if config.exists():
        print(f"配置文件存在: {config}")
    
  2. 路径操作

    # 获取路径各部分
    p = Path('/usr/local/bin/python')
    print(p.parts)  # ('/', 'usr', 'local', 'bin', 'python')
    print(p.name)   # 'python'
    print(p.stem)   # 'python'
    print(p.suffix) # ''
    print(p.parent) # /usr/local/bin
    
    # 路径匹配
    if p.match('*/bin/*'):
        print("路径包含 bin 目录")
    
  3. 文件操作

    # 读取文件
    with Path('file.txt').open() as f:
        content = f.read()
    
    # 写入文件
    Path('output.txt').write_text('Hello, World!')
    
    # 读取二进制文件
    data = Path('image.png').read_bytes()
    
  4. 目录遍历

    # 列出目录内容
    for item in Path('/path/to/dir').iterdir():
        print(item)
    
    # 查找特定文件
    for py_file in Path('/path/to/project').glob('**/*.py'):
        print(py_file)
    
    # 递归遍历目录
    for root, dirs, files in Path('/path/to/dir').walk():
        print(f"目录: {root}")
        print(f"子目录: {dirs}")
        print(f"文件: {files}")
    

命令 / API 速查

功能API 方法
创建路径Path(), PurePath()
路径拼接/ 运算符, joinpath()
路径解析resolve(), absolute()
路径属性name, stem, suffix, parent, parts
检查路径exists(), is_dir(), is_file(), is_symlink()
文件操作open(), read_text(), write_text(), read_bytes(), write_bytes()
目录操作iterdir(), glob(), rglob(), walk()
路径匹配match(), full_match()
文件系统操作mkdir(), unlink(), rmdir(), rename(), replace()
符号链接symlink_to(), readlink()
权限操作chmod(), lchmod()

与 Agent 开发的联系

  1. 工具调用中的文件处理:Agent 在调用工具时经常需要处理文件系统,如读取配置文件、保存日志、处理用户上传的文件等,pathlib 提供了跨平台的文件操作方式。
  2. 结构化数据存储:Agent 可能需要将处理结果保存为结构化文件(如 JSON、YAML),pathlib 的文件读写方法简化了这一过程。
  3. 动态文件系统导航:Agent 在处理文件系统任务时,如代码分析、文档生成等,需要遍历目录结构,pathlib 的 glob()walk() 方法提供了强大的目录遍历能力。

初学者易错点

  1. 路径拼接错误:使用 + 而不是 / 来拼接路径,正确的做法是使用 / 运算符或 joinpath() 方法。
  2. 混淆纯路径和具体路径:纯路径不进行实际文件系统操作,如果需要读取或写入文件,应使用具体路径(Path)。
  3. 忽略路径解析:在处理相对路径时,忘记使用 resolve()absolute() 获取绝对路径,可能导致文件找不到。
  4. 路径规范化问题:pathlib 会自动规范化路径(如去除 ./../),这可能与预期行为不符,特别是在处理符号链接时。
  5. 大小写敏感性:在不同操作系统上,路径的大小写敏感性不同,Windows 默认不区分大小写,而 Unix 系统区分。

相关词条

  • library-os.path - 传统路径操作模块
  • library-glob - 文件模式匹配
  • library-shutil - 高级文件操作
  • library-tempfile - 临时文件处理
  • library-fs - 虚拟文件系统接口

官方原文:https://docs.python.org/zh-cn/3/library/pathlib.html