3

ここで奇妙な質問。

.txt反復したいファイルがあります。ファイルからすべての単語を配列に取得できますが、これは良い方法ですが、ファイル全体を反復処理する方法を知りたいのですが、個々の文字ではなく、単語自体を反復処理する方法を知りたいです。

ファイルからのすべてのテキストを格納する配列を調べて、基本的に単語が含まれるすべてのインスタンスをカウントできるようにしたいと考えています。

唯一の問題は、コードの書き方がわからないことです。

for ループを使用してみましたが、単語全体が必要な場合は、すべての文字を反復するだけです。

4

4 に答える 4

12

このコードは、スペースで区切られた file.txt を読み取ります

f = open("file.txt", "r")
words = f.read().split()
for w in words:
    print w
于 2012-05-04T05:23:37.627 に答える
3
file = open("test")
for line in file:
    for word in line.split(" "):
         print word
于 2012-05-04T05:25:13.303 に答える
1

未テスト:

def produce_words(file_):
   for line in file_:
     for word in line.split():
        yield word

def main():
   with open('in.txt', 'r') as file_:
      for word in produce_words(file_):
         print word
于 2012-05-04T05:48:33.513 に答える
1

ファイル全体をループしたい場合、賢明なことは、行を取得して単語に分割して、それを反復処理することです。最初にファイル全体をメモリに読み込まないことを意味するため、行ごとに作業するのが最適です (大きなファイルの場合、多くの時間がかかるか、メモリ不足になる可能性があります)。

with open('in.txt') as input:
    for line in input:
        for word in line.split():
            ...

余分な空白をすべて削除するためline.split(" ")、より多くの空白を保持したい場合に使用できることに注意してください。line.split()

また、withステートメントを使用してファイルを開くことにも注意してください。これは、例外が発生した場合でも、読みやすく、ファイルを閉じることを処理するためです。

これは良い解決策ですが、最初のループ内で何もしていない場合は、少し非効率的です。これを 1 つのループに減らすためにitertools.chain.from_iterableジェネレータ式を使用できます。

import itertools
with open('in.txt') as input:
    for word in itertools.chain.from_iterable(line.split() for line in input):
            ...
于 2012-05-04T08:36:53.297 に答える