Edited at

[Python]ファイルの指定行を読み込む

More than 3 years have passed since last update.


指定行を読み込む

ファイルから指定行のみをプログラム中で取り出したい時のメモ


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行ごとに記述してあるファイルです。(最初lineno0から始まると思ったら1からだったので、0から始まってる。)

今回作ったコード:https://github.com/KodairaTomonori/Qiita/tree/master/default_module/linecache


サンプル


test_linecache.py

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

で普通に見ることができます。