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)

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

linecache.lazycache(filename, module_globals)

Соберите достаточно подробностей о модуле, не основанном на файлах, чтобы позже можно было получить его строки через getline(), даже если module_globals равен None в более позднем вызове. Это позволяет избежать выполнения операций ввода-вывода до тех пор, пока строка действительно не понадобится, без необходимости бесконечно переносить глобальные значения модуля.

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

Пример:

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