linecache
— Произвольный доступ к строкам текста
Модуль 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'