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 が凍結モジュールを示す場合 ('<frozen ' で始まる場合)、module_globals が None でなければ、module_globals['__file__'] から実際のファイル名を取得しようとします。

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

バージョン 3.14 で変更: 凍結モジュールの filename をサポートしました。

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'