# `linecache` — Random access to text lines

Вихідний код: Lib/linecache.py

The `linecache` module allows one to get any line from a Python source file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. This is used by the `traceback` module to retrieve source lines for inclusion in the formatted traceback.

Функція `tokenize.open()` використовується для відкриття файлів. Ця функція використовує `tokenize.detect_encoding()`, щоб отримати кодування файлу; за відсутності маркера кодування, кодування файлу за замовчуванням — UTF-8.

The `linecache` module defines the following functions:

linecache.getline(filename, lineno, module_globals=None)

  Отримати рядок lineno з файлу з назвою filename. Ця функція ніколи не викличе виняток — вона повертатиме `''` у разі помилки (кінцевий символ нового рядка буде включено для знайдених рядків).

  If filename indicates a frozen module (starting with `'<frozen '`), the function will attempt to get the real file name from `module_globals['__file__']` if module_globals is not `None`.

  Якщо файл із назвою filename не знайдено, функція спочатку перевіряє наявність PEP 302 `__loader__` у module_globals. Якщо такий завантажувач існує і він визначає метод get_source, то він визначає вихідні рядки (якщо get_source() повертає None, тоді повертається `''`). Нарешті, якщо filename є відносною назвою файлу, вона шукається відносно записів у шляху пошуку модуля, `sys.path`.

  Змінено в версії 3.14: Support filename of frozen modules.

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'