linecache — Random access to text lines

Вихідний код: 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'