linecache — Произвольный доступ к текстовым строкам


Модуль linecache позволяет получить любую строку из исходного файла Python при попытке внутренней оптимизации, используя кэш, общий случай, когда многие строки считываются из одного файла. Он используется модулем traceback, чтобы восстановить строки исходного кода для включения в отформатированный трейсбэк.

Используется функция tokenize.open() чтобы открыть файлы. Эта функция использует tokenize.detect_encoding() для получения кодировки файла; при отсутствии маркера кодировки кодировка файла по умолчанию имеет значение UTF-8.

Модуль linecache определяет следующие функции:

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

Получить строку lineno из файла с именем filename. Эта функция никогда не будет поднимать исключение — она будет возвращать '' на ошибках (заканчивающийся newline символ будет включен для линий, которые найдены).

Если файл с именем filename не найден, функция сначала проверяет наличие PEP 302 __loader__ в module_globals. Если есть такой загрузчик и он определяет метод get_source, то он определяет исходные строки (если get_source() возвращает None, то '' - возвращенный). И, наконец, если filename является относительным именем файла, он просматривается относительно записей в пути поиска модуля, sys.path.

linecache.clearcache()

Очистить кэш. Эта функция используется, если строки из файлов, ранее считывавшихся с помощью функции getline(), больше не требуются.

linecache.checkcache(filename=None)

Проверить действительность кэша. Используйте эту функцию, если файлы в кэш, возможно, изменились на диске, и вы требуете обновленной версии. Если filename пропущен, она проверит все записи в кэше.

linecache.lazycache(filename, module_globals)

Записать достаточно подробной информации о модуле, не основанном на файле, чтобы разрешить получение его линий позже через getline(), даже если module_globals None в более позднем вызове. Она старается не делать I/O, пока строка фактически не понадобится, без необходимости содержания модуля globals бесконечно.

Добавлено в версии 3.5.

Пример:

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