Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
43
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@Kodaira_

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

指定行を読み込む

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
43
Help us understand the problem. What is going on with this article?