# `linecache` --- テキストラインへのランダムアクセス

ソースコード: 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)

  filename という名前のファイルから lineno 行目を取得します。この関数は決して例外を発生させません --- エラーの際には `''` を返します (行末の改行文字は、見つかった行に含まれます)。

  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 という名前のファイルが見付からなかった場合、この関数は最初に module_globals にある PEP 302 `__loader__` を確認します。 ローダーが存在していて、 `get_source` メソッドが実装されていた場合、ソースコードの行を決定します (`get_source()` が `None` を返した場合は、 `''` が返ります)。 最後に、 filename が相対ファイル名だった場合、モジュール検索パス `sys.path` のエントリからの相対パスを探します。

  バージョン 3.14 で変更: Support filename of frozen modules.

linecache.clearcache()

  キャッシュをクリアします。それまでに `getline()` を使って読み込んだファイルの行が必要でなくなったら、この関数を使ってください。

linecache.checkcache(filename=None)

  キャッシュが有効かどうかを確認します。キャッシュしたファイルがディスク上で変更された可能性があり、更新後のバージョンが必要な場合にこの関数を使用します。 filename が与えられない場合、全てのキャッシュエントリを確認します。

linecache.lazycache(filename, module_globals)

  後々の呼び出しで module_globals が `None` となっていても、ファイルの形式でないモジュールの行を後から `getline()` で取得するのに十分な詳細を把握しておきます。この関数により、モジュールの globals を無限に持ち運ぶ必要無しに、実際に必要な行まで I/O を行う必要がなくなります。

  Added in version 3.5.

以下はプログラム例です:

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