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 版本起已棄用,將在 3.14 版本中移除: 請改用 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 物件。