指定行を読み込む
ファイルから指定行のみをプログラム中で取り出したい時のメモ
linecache
ソースコード:https://hg.python.org/cpython/file/3.4/Lib/linecache.py
参考URL:http://docs.python.jp/3.4/library/linecache.html
linecache モジュールは、キャッシュ (一つのファイルから何行も読んでおくのが一般的です) を使って、内部で最適化を図りつつ、Python ソースファイルの任意の行を取得するのを可能にします。 traceback モジュールは、整形されたトレースバックにソースコードを含めるためにこのモジュールを利用しています。
linecache.getline(filename, lineno)で指定行を読み込むことができます。filenameにはファイルネームを、linenoには行数を指定します。linenoは、1~の整数です。
下記で使ったsample.txtは、0行目から1000行目までN行目と1行ごとに記述してあるファイルです。(最初linenoが0から始まると思ったら1からだったので、0から始まってる。)
今回作ったコード:https://github.com/KodairaTomonori/Qiita/tree/master/default_module/linecache
サンプル
import linecache
a = input('取り出したい行数は?:')
target_line = linecache.getline('sample.txt', int(a))
print(target_line)
linecache.clearcache()
出力
$ head sample.txt
0行目
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
$ python test_linecache.py
取り出したい行数は?:100
99行目
解説
linecache.getlineでその指定した行の文字列を返してくれています。
最後のlinecache.clearcache()は、最初に引用した文にも書いてある通り、キャッシュを使っているので、そのファイルを使わなくなったら、クリアをしておきましょう。
ファイルサイズが小さいものだと、普通にreadlines()でリスト作ってやったほうが早いと思います。(速度的な話ではなく)
また、指定行を確認したいだけならば、
head -100 sample.txt | tail -1
で普通に見ることができます。