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

Источник: Lib/linecache.py


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

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

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

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

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

Если файл с именем 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 в последующем вызове. Это позволяет не выполнять ввод-вывод до тех пор, пока строка действительно не понадобится, и не таскать с собой глобалы модуля бесконечно.

Added in version 3.5.

Пример:

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