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.