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