linecache — Slumpmässig tillgång till textrader

Källkod: Lib/linecache.py


Modulen linecache gör det möjligt att hämta valfri rad från en Python-källfil, samtidigt som man försöker optimera internt med hjälp av en cache, i det vanliga fallet när många rader läses från en enda fil. Detta används av modulen traceback för att hämta källrader som ska ingå i den formaterade spårningen.

Funktionen tokenize.open() används för att öppna filer. Denna funktion använder tokenize.detect_encoding() för att hämta filens kodning; i avsaknad av en kodningstoken är filens kodning som standard UTF-8.

Modulen linecache definierar följande funktioner:

linecache.getline(filename, lineno, module_globals=None)

Hämta rad lineno från filen med namnet filnamn. Denna funktion kommer aldrig att ge upphov till ett undantag — den kommer att returnera '' vid fel (det avslutande newline-tecknet kommer att inkluderas för de rader som hittas).

Om filnamn anger en fryst modul (som börjar med '<frozen), kommer funktionen att försöka få det riktiga filnamnet från module_globals['__file__'] om module_globals inte är None.

Om en fil med namnet filnamn inte hittas, söker funktionen först efter en PEP 302 __loader__ i module_globals. Om det finns en sådan laddare och den definierar en get_source-metod, så bestämmer den källraderna (om get_source() returnerar None, så returneras ''). Slutligen, om filnamn är ett relativt filnamn, söks det upp i förhållande till posterna i modulens sökväg, sys.path.

Ändrad i version 3.14: Stöd för filnamn på frysta moduler.

linecache.clearcache()

Rensa cacheminnet. Använd den här funktionen om du inte längre behöver rader från filer som tidigare lästs med getline().

linecache.checkcache(filename=None)

Kontrollera att cacheminnet är giltigt. Använd den här funktionen om filer i cacheminnet kan ha ändrats på disken och du behöver den uppdaterade versionen. Om filnamn utelämnas kontrolleras alla poster i cacheminnet.

linecache.lazycache(filename, module_globals)

Fånga tillräckligt med detaljer om en icke-filbaserad modul för att kunna hämta dess rader senare via getline() även om module_globals är None i det senare anropet. Detta undviker att göra I/O tills en rad faktiskt behövs, utan att behöva bära modulglobalerna runt på obestämd tid.

Tillagd i version 3.5.

Exempel:

>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'