importlib.resources.abc
– 資源的抽象基類¶
原始碼: Lib/importlib/resources/abc.py
在 3.11 版本中新增。
- class importlib.resources.abc.ResourceReader¶
已被 TraversableResources 取代
一個提供讀取*資源*能力的抽象基類。
在此 ABC 看來,*資源*是包內附帶的二進位制工件。通常,這類似於包的
__init__.py
檔案旁的資料檔案。這個類的目的是幫助抽象化對此類資料檔案的訪問,從而無論包及其資料檔案是儲存在 zip 檔案中還是檔案系統上,訪問方式都一樣。對於該類的任何方法,*resource* 引數應為一個類路徑物件,它在概念上只代表一個檔名。這意味著 *resource* 引數中不應包含任何子目錄路徑。這是因為讀取器所對應的包的位置,就扮演了“目錄”的角色。因此,目錄和檔名的比喻,分別對應著包和資源。這也是為什麼該類的例項應直接與特定的包相關聯(而不是可能代表多個包或一個模組)。
希望支援資源讀取的載入器,應提供一個名為
get_resource_reader(fullname)
的方法,該方法返回一個實現了此 ABC 介面的物件。如果 fullname 指定的模組不是一個包,此方法應返回None
。只有當指定的模組是包時,才應返回與此 ABC 相容的物件。自 3.12 版本起不推薦使用: 請改用
importlib.resources.abc.TraversableResources
。- abstractmethod open_resource(resource)¶
返回一個已開啟的、用於二進位制讀取*資源*的類檔案物件。
如果找不到資源,則引發
FileNotFoundError
。
- abstractmethod resource_path(resource)¶
返回*資源*的檔案系統路徑。
如果資源在檔案系統上並未具體存在,則引發
FileNotFoundError
。
- abstractmethod is_resource(name)¶
如果指定的 *name* 被視為資源,則返回
True
。如果 *name* 不存在,則引發FileNotFoundError
。
- abstractmethod contents()¶
返回一個包含包內容的字串可迭代物件。請注意,不要求迭代器返回的所有名稱都是實際資源,例如,返回的名稱對於
is_resource()
可能為 false,這是可接受的。允許返回非資源名稱,是為了應對那些預先知道包及其資源儲存方式,並且非資源名稱有用的情況。例如,允許返回子目錄名稱,這樣當已知包和資源儲存在檔案系統上時,這些子目錄名稱就可以直接使用。
該抽象方法返回一個不含任何項的可迭代物件。
- class importlib.resources.abc.Traversable¶
一個包含
pathlib.Path
部分方法,適用於遍歷目錄和開啟檔案的物件。要獲取物件在檔案系統上的表示,請使用
importlib.resources.as_file()
。- name¶
抽象屬性。此物件的基本名稱,不含任何父級引用。
- abstractmethod iterdir()¶
生成 self 中的 Traversable 物件。
- abstractmethod is_dir()¶
如果 self 是目錄,則返回
True
。
- abstractmethod is_file()¶
如果 self 是檔案,則返回
True
。
- abstractmethod joinpath(*pathsegments)¶
根據 *pathsegments* 遍歷目錄,並將結果作為
Traversable
返回。每個 *pathsegments* 引數都可以包含多個由正斜槓(
/
,即posixpath.sep
)分隔的名稱。例如,以下寫法是等價的:files.joinpath('subdir', 'subsuddir', 'file.txt') files.joinpath('subdir/subsuddir/file.txt')
請注意,某些
Traversable
實現可能未更新到協議的最新版本。為與此類實現相容,請在每次呼叫joinpath
時提供單個不含路徑分隔符的引數。例如:files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')
在 3.11 版本發生變更:
joinpath
接受多個 *pathsegments*,並且這些段可以包含正斜槓作為路徑分隔符。以前只接受單個 *child* 引數。
- abstractmethod __truediv__(child)¶
返回 self 中的子 Traversable 物件。等價於
joinpath(child)
。
- abstractmethod open(mode='r', *args, **kwargs)¶
*mode* 可以是 'r' 或 'rb',分別以文字或二進位制模式開啟。返回一個適合讀取的控制代碼(與
pathlib.Path.open
相同)。當以文字模式開啟時,接受編碼引數,例如
io.TextIOWrapper
所接受的引數。
- read_bytes()¶
以位元組形式讀取 self 的內容。
- read_text(encoding=None)¶
以文字形式讀取 self 的內容。
- class importlib.resources.abc.TraversableResources¶
一個資源讀取器的抽象基類,能夠服務於
importlib.resources.files()
介面。它繼承自ResourceReader
,併為ResourceReader
的抽象方法提供了具體實現。因此,任何提供TraversableResources
的載入器,也同時提供了ResourceReader
。希望支援資源讀取的載入器,應實現此介面。
- abstractmethod files()¶
為已載入的包返回一個
importlib.resources.abc.Traversable
物件。