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'