Python Pathlib生存手册,几个短例子极速上手

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()

参考

Leave a Comment

Your email address will not be published.