pathlib --- 物件導向檔案系統路徑¶
在 3.4 版被加入.
原始碼:Lib/pathlib/
此模組提供代表檔案系統路徑的類別,能適用不同作業系統的語意。路徑類別分成兩種,一種是純路徑 (pure paths),提供沒有 I/O 的單純計算操作,另一種是實體路徑 (concrete paths),繼承自純路徑但也提供 IO 操作。
如果你之前從未使用過此模組或不確定哪個類別適合你的任務,那你需要的最有可能是 Path。它針對程式執行所在的平台實例化一個實體路徑。
純路徑在某些特殊情境下是有用的,例如:
如果你想在 Unix 機器上處理 Windows 路徑(或反過來),你無法在 Unix 上實例化
WindowsPath,但你可以實例化PureWindowsPath。你想確保你的程式在操作路徑的時候不會真的存取到 OS。在這個情況下,實例化其中一種純路徑類別可能是有用的,因為它們不會有任何存取 OS 的操作。
也參考
PEP 428:pathlib 模組 -- 物件導向檔案系統路徑。
也參考
針對字串上的底層路徑操作,你也可以使用 os.path 模組。
基本用法¶
匯入主要類別:
>>> from pathlib import Path
列出子目錄:
>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
PosixPath('__pycache__'), PosixPath('build')]
在目前目錄樹下列出 Python 原始碼檔案:
>>> list(p.glob('**/*.py'))
[PosixPath('test_pathlib.py'), PosixPath('setup.py'),
PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
PosixPath('build/lib/pathlib.py')]
瀏覽目錄樹內部:
>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')
查詢路徑屬性:
>>> q.exists()
True
>>> q.is_dir()
False
開啟檔案:
>>> with q.open() as f: f.readline()
...
'#!/bin/bash\n'
例外¶
- exception pathlib.UnsupportedOperation¶
繼承自
NotImplementedError的例外,當在路徑物件上呼叫不支援的操作時會被引發。在 3.13 版被加入.
純路徑¶
純路徑物件提供處理路徑的操作,實際上不會存取檔案系統。有三種方式可以存取這些類別,我們也稱之為類型 (flavours):
- class pathlib.PurePath(*pathsegments)¶
一個通用的類別,表示系統的路徑類型(實例化時會建立一個
PurePosixPath或PureWindowsPath):>>> PurePath('setup.py') # 執行在 Unix 機器上 PurePosixPath('setup.py')
pathsegments 中的每個元素可以是以下的其中一種:一個表示路徑片段的字串,或一個物件,它實作了
os.PathLike介面且其中的__fspath__()方法會回傳字串,就像是另一個路徑物件:>>> PurePath('foo', 'some/path', 'bar') PurePosixPath('foo/some/path/bar') >>> PurePath(Path('foo'), Path('bar')) PurePosixPath('foo/bar')
當沒有給 pathsegments 的時候,會假設是目前的目錄:
>>> PurePath() PurePosixPath('.')
如果一個片段是絕對路徑,則所有之前的片段會被忽略(類似
os.path.join()):>>> PurePath('/etc'