私の質問をもっとよく説明しましょう!この形式の入力ファイルがあります
word1 word2
word3 word4 word5
word4 word6
word3 を指定して、行全体を取得し、word4 と word5 を取得できるようにしたいと考えています。
ファイルを開いて、各行の解析は可能ですが、私のファイルサイズは巨大で、非常に時間がかかります。これを行うことができる費用対効果の高い方法はありますか?
どんな助けでも大歓迎です!
Python のlinecacheモジュールは、ファイルから特定の行番号を検索するための、私が知っている最速の方法です。その行の最初の単語に一致する行が必要ですが、おそらく linecache を使用してそこに到達できます。それでは、単語から行番号へのマッピングを作成しましょう。
from linecache import getline, getlines
from collections import defaultdict
first_words = defaultdict(int)
first_words.update(
(line.split()[0], number)
for number, line in enumerate(getlines(filename), 1)
if line
)
ここから行を取得するには、次のようにします。
>>> getline(filename, first_words['word3'])
'word3 word4 word5\n'
>>> getline(filename, first_words['word4'])
'word4 word6\n'
行の最初の単語ではない単語を取得しようとすると、空の文字列が取得されます。
>>> getline(filename, first_words['word6'])
''
さて、いくつかの行で同じ単語が始まる可能性があると思います。その場合、複数の行を取得したい場合があります。したがって、その場合を説明する修正版は次のとおりです。
from linecache import getline, getlines
from collections import defaultdict
from operator import itemgetter
first_words = defaultdict(list)
for number, line in enumerate(getlines(filename), 1):
if line:
first_words[line.split(0)].append(number)
次に、行を取得します。
itemgetter(*first_words['word3'])(getlines(filename))