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 物件。