linecache — Zufälliger Zugriff auf Textzeilen¶
Quellcode: Lib/linecache.py
Mit dem Modul linecache lässt sich jede beliebige Zeile aus einer Python-Quelldatei holen. Dabei wird intern mit einem Cache der häufige Fall optimiert, dass viele Zeilen aus einer einzigen Datei gelesen werden. Das Modul traceback nutzt das, um Quellzeilen für die Aufnahme in das formatierte Traceback zu beschaffen.
Zum Öffnen von Dateien wird die Funktion tokenize.open() verwendet. Diese Funktion ermittelt die Kodierung der Datei mit tokenize.detect_encoding(). Fehlt ein Kodierungs-Token, wird UTF-8 als Kodierung der Datei angenommen.
Das Modul linecache legt die folgenden Funktionen fest:
- linecache.getline(filename, lineno, module_globals=None)¶
Holt die Zeile lineno aus der Datei namens filename. Diese Funktion löst nie eine Ausnahme aus — bei Fehlern gibt sie
''zurück (bei gefundenen Zeilen ist das abschließende Zeilenumbruchzeichen enthalten).Deutet filename auf ein eingefrorenes Modul (beginnt es also mit
'<frozen '), versucht die Funktion, den echten Dateinamen ausmodule_globals['__file__']zu holen, sofern module_globals nichtNoneist.Wird keine Datei namens filename gefunden, sucht die Funktion zuerst nach einem
__loader__nach PEP 302 in module_globals. Gibt es einen solchen Lader und legt er eine Methodeget_sourcefest, bestimmt diese die Quellzeilen (gibtget_source()Nonezurück, wird''zurückgegeben). Ist filename schließlich ein relativer Dateiname, wird er relativ zu den Einträgen im Modulsuchpfadsys.pathnachgeschlagen.Geändert in Version 3.14: filename von eingefrorenen Modulen wird unterstützt.
- linecache.clearcache()¶
Leert den Cache. Verwende diese Funktion, wenn du keine Zeilen aus Dateien mehr brauchst, die vorher mit
getline()gelesen wurden.
- linecache.checkcache(filename=None)¶
Prüft den Cache auf Gültigkeit. Verwende diese Funktion, wenn Dateien im Cache sich auf der Platte geändert haben könnten und du die aktualisierte Fassung brauchst. Wird filename weggelassen, werden alle Einträge im Cache geprüft.
- linecache.lazycache(filename, module_globals)¶
Erfasst genug Angaben über ein Modul, das nicht auf einer Datei beruht, damit sich seine Zeilen später über
getline()holen lassen, auch wenn module_globals beim späteren AufrufNoneist. Dadurch wird erst dann Ein-/Ausgabe nötig, wenn eine Zeile wirklich gebraucht wird, ohne die globalen Variablen des Moduls unbegrenzt mitführen zu müssen.Added in version 3.5.
Beispiel:
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'