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'