linecache
使用法が示すように、ファイル オブジェクトではなくファイル名を取ります。エンコーディングの規定はありません。また、ドキュメントから:
これは、フォーマットされたトレースバックに含めるソース行を取得するために、トレースバック モジュールによって使用されます。
これは、主に Python ソース コードに使用されることを意味します。結局のところ、ファイルに Python ソース ファイルのエンコーディング コメントがある場合は、次のように機能します。
入力.txt
# coding: iso-8859-1
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»
¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
test.py
import linecache
print(linecache.getline('input.txt', 3))
出力
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»
したがってlinecache
、おそらくあなたの問題の解決策ではありません。代わりに、示したようにファイルを開き、おそらく自分で行をキャッシュします。
with open('x.txt',encoding='iso-8859-1') as f:
lines = f.readlines()
print(lines[2])
のように、ファイル全体を読み取りたくない場合は、読み取り時にリストに行を追加することもできますlinecache
。