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 aus module_globals['__file__'] zu holen, sofern module_globals nicht None ist.

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 Methode get_source fest, bestimmt diese die Quellzeilen (gibt get_source() None zurück, wird '' zurückgegeben). Ist filename schließlich ein relativer Dateiname, wird er relativ zu den Einträgen im Modulsuchpfad sys.path nachgeschlagen.

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 Aufruf None ist. 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'