9

Pythonのファイルでいくつかの単語を探しています。各単語を見つけたら、ファイルから次の2つの単語を読み取る必要があります。私はいくつかの解決策を探しましたが、次の単語だけを読むことができませんでした。

# offsetFile - file pointer
# searchTerms - list of words

for line in offsetFile:
    for word in searchTerms:
        if word in line:
           # here get the next two terms after the word

お時間をいただきありがとうございます。

更新:最初の外観のみが必要です。この場合、実際には単語の出現は1回だけです。

ファイル:

accept 42 2820 access 183 3145 accid 1 4589 algebra 153 16272 algem 4 17439 algol 202 6530

単語:['アクセス'、'代数']

'access'と'algebra'に遭遇したときにファイルを検索するには、それぞれ1833145と15316272の値が必要です。

4

4 に答える 4

18

これに対処する簡単な方法は、ファイルから一度に1つの単語を生成するジェネレーターを使用してファイルを読み取ることです。

def words(fileobj):
    for line in fileobj:
        for word in line.split():
            yield word

次に、興味のある単語を見つけて、次の2つの単語を読みます。

with open("offsetfile.txt") as wordfile:
    wordgen = words(wordfile)
    for word in wordgen:
        if word in searchterms:   # searchterms should be a set() to make this fast
            break
    else:
        word = None               # makes sure word is None if the word wasn't found

    foundwords = [word, next(wordgen, None), next(wordgen, None)]

foundwords[0]はあなたが見つけた単語でfoundwords[1]あり、その後の単語であり、foundwords[2]その後の2番目の単語です。十分な単語がない場合、リストの1つ以上の要素はになりますNone

これを1行以内でのみ一致させたい場合は少し複雑ですが、通常はファイルを単なる単語のシーケンスと見なすことができます

于 2012-04-22T01:37:27.420 に答える
1

最初の2つの単語だけを取得する必要がある場合は、次のようにします。

offsetFile.readline()。split()[:2]
于 2012-04-22T01:40:04.390 に答える
1
word = '3' #Your word
delim = ',' #Your delim

with open('test_file.txt') as f:
    for line in f:
        if word in line:
            s_line = line.strip().split(delim)
            two_words = (s_line[s_line.index(word) + 1],\
            s_line[s_line.index(word) + 2])
            break
于 2012-04-22T01:47:42.747 に答える
1
    def searchTerm(offsetFile, searchTerms):
            # remove any found words from this list; if empty we can exit
            searchThese = searchTerms[:]
            for line in offsetFile:
                    words_in_line = line.split()
                    # Use this list comprehension if always two numbers continue a word.
                    # Else use words_in_line.
                    for word in [w for i, w in enumerate(words_in_line) if i % 3 == 0]:
                            # No more words to search.
                            if not searchThese:
                                    return
                            # Search remaining words.
                            if word in searchThese:
                                    searchThese.remove(word)
                                    i = words_in_line.index(word)
                                    print words_in_line[i:i+3]

'access'、'algebra'の場合、次の結果が得られます。

['access'、 '183'、 '3145']
['algebra'、 '153'、 '16272']

于 2012-04-22T11:49:19.140 に答える