LoginSignup
37
42

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-04

指定行を読み込む

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

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
で普通に見ることができます。

37
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
42