pathlib
-
Python built-in, version >= 3.4 -
考虑到 Windows/Linux 等不同操作系统下路径的差异,建议不再使用 os.path.*和字符串来管理路径。 -
from pathlib import Path
操作 | 例子 | 备注 |
---|---|---|
创建 | p = Path('C:/Users/Username/Documents) | 可以是文件,也可以是文件夹,现在还不能保证这个路径有东西 |
p = Path('C: \\', 'Users', 'Username', 'Documents') | 等价写法,可以把各个部分拆开 | |
p2 = p.with_name('file2.txt') | 快速获得同一文件夹下其他文件的 Path 对象 | |
p2 = p.with_suffix('.csv') | 快速获得同一文件 basename 但不同后缀的 Path 对象 | |
拼接 | p = Path(...) / str_of_subpath | 非常自然地用除号进行连接 |
p = Path(...).joinpath(str_of_subpath) | 也可以用方法 | |
完整路径字符串 | str(p) | |
获取上一级 | p.parent | 文件夹的上级文件夹;文件的所在文件夹;可以连用多个 parent |
获取 basename, noext-basename, ext | p.name, p.stem, p.suffix | |
获取所在文件夹(os.path.dirname) | p.parent 即可。如果还要获取文件夹的路径再 str() | |
获取路径里各节组成的字符串元组 | p.parts | Windows 的 C: \\ 是一个单独的字符串 |
是否存在,是否是文件/文件夹 | p.exists(), p.is_file(), p.is_dir() | |
遍历 | p.iterdir() | 返回生成器,可用 for 迭代,需要事先判断是否为文件夹 |
查找(基于正则) | p.glob('*.txt') | 返回生成器,需要事先判断是否为文件夹,见 4 glob built-in |
p.glob('*/*.txt') | 查找当前文件夹下一级所有文件夹里的 txt | |
p.glob('**/*.txt') | 查找当前文件夹下所有级 文件夹里的 txt | |
读写 | p.read_text(...), p.read_bytes(...) p.write_text(...), p.write_bytes(...) | 都不用调用 open 打开了 |
with | with p.open('r') as f: | 和普通的 open 一样用 |
判断两个路径是否等价 | p.samefile(str_of_file) | |
创建/删除空文件夹 | p.mkdir(), p.rmdir() |
本文由 mdnice 多平台发布