# `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` у наступному виклику. Це дозволяє уникнути введення/виведення, доки рядок дійсно не знадобиться, без необхідності носити глобальні модулі безкінечно.

  Added in version 3.5.

Приклад:

    >>> import linecache
    >>> linecache.getline(linecache.__file__, 8)
    'import sys\n'