# 11.9. `linecache` --- テキストラインにランダムアクセスする

ソースコード: Lib/linecache.py

`linecache` モジュールは、キャッシュ (一つのファイルから何行も読んでおくのが一般的です) を使って、内部で最適化を図りつつ、Python ソースファイルの任意の行を取得するのを可能にします。 `traceback` モジュールは、整形されたトレースバックにソースコードを含めるためにこのモジュールを利用しています。

`tokenize.open()` 関数は、ファイルを開くために使用されます。この関数は、 `tokenize.detect_encoding()` を使用してファイルのエンコーディングを取得します。エンコーディングトークンが存在しない場合、デフォルトの UTF-8 になります。

`linecache` モジュールでは次の関数が定義されています:

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

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

  filename という名前のファイルが見つからなかった場合、モジュールの、つまり、 `sys.path` でそのファイルを探します。 zipfileやその他のファイルシステムでないimport元に対応するためまず module_globals の PEP 302 `__loader__` をチェックし、そのあと `sys.path` を探索します。

`linecache.``clearcache`()

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

`linecache.``checkcache`(filename=None)

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

`linecache.``lazycache`(filename, module_globals)

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

  バージョン 3.5 で追加.

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

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