importlib.resources
– Läsning, öppning och åtkomst av paketresurser¶
Källkod: Lib/importlib/resources/__init__.py
Tillagd i version 3.7.
Denna modul utnyttjar Pythons importsystem för att ge tillgång till resurser inom paket.
”Resurser” är filliknande resurser som är associerade med en modul eller ett paket i Python. Resurserna kan finnas direkt i ett paket, i en underkatalog som ingår i paketet eller i anslutning till moduler utanför paketet. Resurserna kan vara text eller binära. Som ett resultat är Python-modulkällor (.py) för ett paket och kompileringsartefakter (pycache) tekniskt de facto-resurser för det paketet. I praktiken är dock resurser främst de artefakter som inte är Python-artefakter och som exponeras specifikt av paketets författare.
Resurser kan öppnas eller läsas i antingen binärt eller textläge.
Resurser är ungefär som filer i kataloger, men det är viktigt att komma ihåg att detta bara är en metafor. Resurser och paket behöver inte existera som fysiska filer och kataloger i filsystemet: ett paket och dess resurser kan till exempel importeras från en zip-fil med zipimport
.
Anteckning
Den här modulen tillhandahåller funktionalitet som liknar pkg_resources Basic Resource Access utan prestandakostnaderna för det paketet. Detta gör det enklare att läsa resurser som ingår i paket, med en stabilare och mer konsekvent semantik.
I den fristående bakrapporten för den här modulen finns mer information om använda importlib.resources och flytta från pkg_resources till importlib.resources.
Loaders
som vill stödja resursläsning bör implementera en get_resource_reader(fullname)
-metod som specificeras av importlib.resources.abc.ResourceReader
.
- class importlib.resources.Anchor¶
Representerar ett ankare för resurser, antingen en
modulobjekt
eller ett modulnamn som en sträng. Definierad somUnion[str, ModuleType]
.
- importlib.resources.files(anchor: Anchor | None = None)¶
Returnerar ett
Traversable
-objekt som representerar resursbehållaren (tänk katalog) och dess resurser (tänk filer). En Traversable kan innehålla andra behållare (tänk underkataloger).anchor är en valfri
Anchor
. Om ankaret är ett paket, löses resurser från det paketet. Om det är en modul löses resurserna i anslutning till den modulen (i samma paket eller i paketroten). Om ankaret utelämnas används den anropande modulen.Tillagd i version 3.9.
Ändrad i version 3.12: package-parametern har bytt namn till anchor. anchor kan nu vara en icke-paketmodul och om den utelämnas kommer den att standardiseras till den anropande modulen. package accepteras fortfarande av kompatibilitetsskäl men kommer att ge upphov till en
DeprecationWarning
. Överväg att skicka ankaret positionellt eller användimportlib_resources >= 5.10
för ett kompatibelt gränssnitt på äldre Pythons.
- importlib.resources.as_file(traversable)¶
Givet ett
Traversable
-objekt som representerar en fil eller katalog, typiskt frånimportlib.resources.files()
, returnera en kontexthanterare för användning i enwith
-sats. Kontexthanteraren tillhandahåller ettpathlib.Path
-objekt.När du avslutar kontexthanteraren rensas alla temporära filer eller kataloger som skapades när resursen extraherades från t.ex. en zip-fil.
Använd
as_file
när Traversable-metoderna (read_text
, etc) inte räcker till och en faktisk fil eller katalog i filsystemet krävs.Tillagd i version 3.9.
Ändrad i version 3.12: Lagt till stöd för traversable som representerar en katalog.
Funktionellt API¶
En uppsättning förenklade, bakåtkompatibla hjälpfunktioner finns tillgängliga. Dessa tillåter vanliga operationer i ett enda funktionsanrop.
För alla följande funktioner:
anchor är en
Anchor
, som ifiles()
. Till skillnad från ifiles
kan det inte utelämnas.path_names är komponenter i en resurs sökvägsnamn, i förhållande till ankaret. Om du t.ex. vill få fram texten i en resurs med namnet
info.txt
använder du:importlib.resources.read_text(min_modul, "info.txt")
Som
Traversable.joinpath
, De enskilda komponenterna bör använda snedstreck (/
) som sökvägsavgränsare. Till exempel är följande likvärdigt:importlib.resources.read_binary(my_module, "pics/painting.png") importlib.resources.read_binary(my_module, "pics", "painting.png")
Av bakåtkompatibilitetsskäl kräver funktioner som läser text ett explicit encoding-argument om flera path_names anges. Om du till exempel vill hämta texten i
info/chapter1.txt
använder du:importlib.resources.read_text(min_modul, "info", "chapter1.txt", kodning='utf-8')
- importlib.resources.open_binary(anchor, *path_names)¶
Öppna den namngivna resursen för binär läsning.
Se inledningen för detaljer om anchor och path_names.
Denna funktion returnerar ett
BinaryIO
-objekt, det vill säga en binär ström som är öppen för läsning.Denna funktion är ungefär likvärdig med:
files(anchor).joinpath(*path_names).open('rb')
Ändrad i version 3.13: Flera väg_namn accepteras.
- importlib.resources.open_text(anchor, *path_names, encoding='utf-8', errors='strict')¶
Öppna den angivna resursen för textläsning. Som standard läses innehållet som strikt UTF-8.
Se introduktionen för detaljer om anchor och path_names. encoding och errors har samma betydelse som i inbyggda
open()
.Av bakåtkompatibilitetsskäl måste argumentet encoding anges explicit om det finns flera path_names. Denna begränsning kommer enligt planerna att tas bort i Python 3.15.
Denna funktion returnerar ett
TextIO
-objekt, det vill säga en textström som är öppen för läsning.Denna funktion är ungefär likvärdig med:
files(anchor).joinpath(*path_names).open('r', encoding=kodning)
Ändrad i version 3.13: Flera path_names accepteras. encoding och errors måste anges som nyckelordsargument.
- importlib.resources.read_binary(anchor, *path_names)¶
Läser och returnerar innehållet i den angivna resursen som
bytes
.Se inledningen för detaljer om anchor och path_names.
Denna funktion är ungefär likvärdig med:
files(anchor).joinpath(*path_names).read_bytes()
Ändrad i version 3.13: Flera väg_namn accepteras.
- importlib.resources.read_text(anchor, *path_names, encoding='utf-8', errors='strict')¶
Läser och returnerar innehållet i den angivna resursen som
str
. Som standard läses innehållet som strikt UTF-8.Se introduktionen för detaljer om anchor och path_names. encoding och errors har samma betydelse som i inbyggda
open()
.Av bakåtkompatibilitetsskäl måste argumentet encoding anges explicit om det finns flera path_names. Denna begränsning kommer enligt planerna att tas bort i Python 3.15.
Denna funktion är ungefär likvärdig med:
files(anchor).joinpath(*path_names).read_text(encoding=kodning)
Ändrad i version 3.13: Flera path_names accepteras. encoding och errors måste anges som nyckelordsargument.
- importlib.resources.path(anchor, *path_names)¶
Ger sökvägen till resursen som en faktisk filsystemssökväg. Denna funktion returnerar en kontexthanterare för användning i en
with
-sats. Kontexthanteraren tillhandahåller ettpathlib.Path
-objekt.När du avslutar kontexthanteraren rensas eventuella temporära filer som skapats, t.ex. när resursen måste extraheras från en zip-fil.
Exempelvis kräver metoden
stat()
en faktisk sökväg till filsystemet; den kan användas så här:med importlib.resources.path(anchor, "resource.txt") som fspath: resultat = fspath.stat()
Se inledningen för detaljer om anchor och path_names.
Denna funktion är ungefär likvärdig med:
as_file(files(anchor).joinpath(*path_names))
Ändrad i version 3.13: Flera path_names accepteras. encoding och errors måste anges som nyckelordsargument.
- importlib.resources.is_resource(anchor, *path_names)¶
Returnerar
True
om den namngivna resursen finns, annarsFalse
. Denna funktion betraktar inte kataloger som resurser.Se inledningen för detaljer om anchor och path_names.
Denna funktion är ungefär likvärdig med:
files(anchor).joinpath(*path_names).is_file()
Ändrad i version 3.13: Flera väg_namn accepteras.
- importlib.resources.contents(anchor, *path_names)¶
Returnerar en iterabel över de namngivna objekten i paketet eller sökvägen. Iterabeln returnerar namn på resurser (t.ex. filer) och icke-resurser (t.ex. kataloger) som
str
. Iterabeln rekurserar inte i underkataloger.Se inledningen för detaljer om anchor och path_names.
Denna funktion är ungefär likvärdig med:
för resurs i files(anchor).joinpath(*path_names).iterdir(): ger resurs.namn
Föråldrad sedan version 3.11: Föredrar
iterdir()
som ovan, vilket ger mer kontroll över resultaten och rikare funktionalitet.