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ånmodule_globals['__file__']
om module_globals inte ärNone
.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 enget_source
-metod, så bestämmer den källraderna (omget_source()
returnerarNone
, 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 ärNone
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'