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

Исходный код: Lib/linecache.py.


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

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

Пример:

>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'
Вернуться на верх