Pathlib是Python里自带的处理OS路径的library,功能非常强大,可以代替原来的os.path
。本文提供几个简单的例子供查询,帮您极速上手,引用到自己的python project里。
创建操作Path对象例子
p = Path('/home/feellikelearning')
可以用”/“直接得到下一层目录或文件的Path对象
codeDir = p / 'code'
Home Path对象例子
需要注意的是,Path constructor的参数不认识~。需要用Path.home()
。
验证tilda不work
p = Path('~')
print(p.as_posix())
print((p / 'code').as_posix())
print((p / 'code').exists()) # False
验证Path.home() work
p = Path.home()
print(p.as_posix())
print((p / 'code').as_posix())
print((p / 'code').exists()) # True
当前目录例子
如果需要当前目录的对象可以用cwd
函数或者.
加resolve
函数
p = Path.cwd()
p = Path('.').resolve()
遍历文件夹例子
也就是implement bash命令
find .
用pathlib实现如下
from pathlib import Path def python_find(target_path_str): def _python_find(p): itr = p.iterdir() for f in itr: print(f.as_posix()) if f.is_dir(): _python_find(f) p = pathlib.Path(target_path_str) _python_find(p) python_find('some/path')
外面函数python_find接受path string,里面的递归函数_python_find接受pathlib.Path object。用iterdir列出当前input path下的所有对象,先打印它们的路径,如果是目录,就继续调用递归函数_python_find打印下一层目录里面的内容。
Pathlib删除文件例子
删除文件
p = Path('/some/filepath/todelete')
p.unlink()
删除目录/文件夹
rmdir只能删除空的文件夹/目录,如果内部还有其他文件或目录会报错。
p = Path('/some/dir/todelete')
p.rmdir()
删除非空目录/文件夹
这个只能自己用上面两个函数用递归实现。这里我增加了显示被删除文件size的信息。
def rmdirRecursive(somePath: pathlib.PosixPath): for f in somePath.iterdir(): if f.is_file(): filesize = f.stat().st_size print(f'deleting {f.as_posix()} -> {filesize}') f.unlink() elif f.is_dir(): rmdirRecursive(f) print(f'deleting directory {somePath.as_posix()}') somePath.rmdir()