#指定行を読み込む
ファイルから指定行のみをプログラム中で取り出したい時のメモ
##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
で普通に見ることができます。