0

私の質問をもっとよく説明しましょう!この形式の入力ファイルがあります

word1 word2  
word3 word4 word5  
word4 word6

word3 を指定して、行全体を取得し、word4 と word5 を取得できるようにしたいと考えています。

ファイルを開いて、各行の解析は可能ですが、私のファイルサイズは巨大で、非常に時間がかかります。これを行うことができる費用対効果の高い方法はありますか?

どんな助けでも大歓迎です!

4

3 に答える 3

0

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))
于 2013-10-15T02:30:46.090 に答える