2012-05-04 15 views
3

ここで奇妙な質問があります。スペースで区切られたASCIIファイルを繰り返し処理する方法

私は反復したいファイル.txtを持っています。私はすべての単語をファイルから配列にすることができますが、これは良いことですが、どのようにしたらよいか知りたいのですが、ファイル全体をどのように反復するのですか?

ファイルからすべてのテキストを格納する配列を通過でき、基本的に単語が表示されているすべてのインスタンスを数えたいと思っています。

私はコードを書く方法がわかりません。

私はforループを使ってみましたが、単語全体が必要なときは、1文字ごとに繰り返し処理しました。

答えて

10

このコードは

f = open("file.txt", "r") 
words = f.read().split() 
for w in words: 
    print w 
+3

これには、長いファイルがメモリに収まらないほど大きくないようで結構です。 –

+0

したがって、rはスペースの区切り記号ですか? – dorien

+1

@dorienいいえ、 "r"はread()関数にファイルの読み取りを指示します。その他のオプションはWrite(この質問には関係ありません)の場合は "w"で、その他のオプションはドキュメントにあります。 – vz0

3
file = open("test") 
for line in file: 
    for word in line.split(" "): 
     print word 
1

未テストFILE.TXT分離スペースを読み取ります

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 
1

あなたはファイル全体をループにしたい場合は、行うには賢明な事はしていますそれを反復し、線を引いてそれらを単語に分割する。行単位で作業することは、ファイル全体を最初にメモリに読み込まないことを意味します。大容量ファイルの場合、時間がかかりすぎるか、メモリ不足の原因となります。

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

line.split()は余分な空白をすべて削除するので、より多くの空白を保存したい場合はline.split(" ")を使用できます。

the with statement私はファイルを開くときに読みやすく、例外を除いてもファイルを閉じることができます。

これは良い解決策ですが、最初のループ内で何もしていなければ、やはり少し効率が悪いです。 1つのループにこれを削減するために、我々はitertools.chain.from_iterablegenerator expressionを使用することができます。

import itertools 
with open('in.txt') as input: 
    for word in itertools.chain.from_iterable(line.split() for line in input): 
      ... 
関連する問題