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_globalsPEP 302 __loader__ をチェックし、そのあと sys.path を探索します。

linecache.clearcache()

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

linecache.checkcache(filename=None)

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

linecache.lazycache(filename, module_globals)

Capture enough detail about a non-file-based module to permit getting its lines later via getline() even if module_globals is None in the later call. This avoids doing I/O until a line is actually needed, without having to carry the module globals around indefinitely.

バージョン 3.5 で追加.

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

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