2017-03-13 11 views
1

私は約20000行のtxtファイルを持っています。私はすべての行を処理し、いくつかの特別な文字列を置き換えて、新しいtxtに内容を書き込むような処理をしなければなりません。 私の処理方法は、コンテンツをリスト、original_listに保存することです。プロセスの後で、新しいリストprocess_listを取得します。 ファイルへの書き込み:多くの行を効率的に書く方法は?

with open('new.txt','w') as f1, 
    for eachline in process_list: 
     f1.write(eachline) 

私はそれがファイルに各行を書くための非常に遅い方法だと思います。だから私は効率的な方法を知りたい。毎回5000行書くのですか?私は推測する。

+4

なぜこれは遅いと思いますか?このファイルは一度だけ開かれ、バッファリングされた出力を持ち、ディスクに書き込まれるタイミングを制御しません。 – AChampion

+0

私は、各行をfile.Myの友達に書き込むことを呼び出すために、より多くのメモリを消費するだろうと推測します。 –

+0

@エヴァンツァンスピードに問題がある場合を除き、あらかじめ最適化する必要はありません – jamylak

答えて

1

これを行うための典型的な方法は、次のようになります。

with open('inFile.txt') as fIn: 
    with open('outFile.txt', 'w') as fOut: 
     for line in fIn: 
      fOut.write(process(line)) 

これはイテレータを作成し、高速であり、ベストプラクティスと考えています。あなたはブロック型の操作をしていますか?あなたが上記の十分な線の操作をしているようです...

+0

このイテレーターはいいと思います。リストを作成する必要はなく、イテレータでライン操作を行うことができます。 –

+0

str_output = 'line1 \ n' + 'line2 \ n + ..' line5000 \ n 'のように、'/n 'を使用して各行を接続し、時間当たり5000行を書き込むと、行全体が処理されます。そしてこの非常に長い文字列をファイルに書き出します。それは効率的ですか? –

+0

私はそうは思わない。そのデータをバックアップするデータはありませんが、Pythonの典型的な実装では、イテレータを使用しているときに自動的にバックグラウンドで実行されます。 – ssm

関連する問題