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'