2017-04-06 11 views
0

私は、スペースで区切られた単語だけを含む巨大な1行のファイルを持っています。私はそれにいくつかの追加のフィルタリングを実行したいと思います。どのように速くそれを行うには?Python:巨大なシングルラインファイルを処理する方法は?

with open("words.txt") as f: 
    lines = f.readlines() 

    for line in lines: 
     words = str(line).split(' ')   

     for w in words: 
      if is_allowed(w): 
       another_file.write(w + " ") 

しかし、それは、extremelly遅い(〜1MB /秒)である:

現在、私は次のコードを持っています。どのようにそれをスピードアップする?

答えて

1

ファイルを「巨大」と記述すると、ファイル全体を一度にメモリにロードし、分割操作を実行するためにファイルをコピーする必要があります。

ファイルをストリームとして扱う方がずっと速いはずです。文字で読む(char = f.read(1));キャラクタがスペースまたはEOF以外のものであれば、それを一時的な文字列に追加します。スペースにヒットしたら、一時的な文字列を処理して空白にしてからやり直してください。 EOFを押すと、一時的な文字列を処理し、ループから抜け出すことができます。

このようにして、任意の瞬間にメモリ内に複数の単語が存在することは決してありません。処理が大幅にスピードアップするはずです。

関連する問題