2017-08-08 18 views
3

私は読み込んだテキストファイルを持っていて、必要なデータを抽出して別の新しいテキストファイルに送信しようとしますが、テキストファイル。出力の最初の行だけがテキストファイルに出力されます

import csv 
    f = open('C:\\Users\\c\\Documents\\DCX.txt') 
    next(f) 
    csv_f=csv.reader(f, delimiter='\t') 
    for row in csv_f: 
     if 'DCX3520E' in row[0] and 'NULL' not in row[6]: 
      with open("out.txt","w") as f1: 
       dcx = row[0] + " " + row[6] 
       aa = dcx[9:] 
       print(aa) 
       f1.writelines(aa) 
+1

それを閉じて、その後、何度も、ファイルを開いて、それに書き込むためのベストプラクティスです本当に '.write'の後にあります。 –

答えて

0

forループ内でファイルを開かないでください。これは毎回ファイルを上書きします。

with open("out.txt","w") as f1: 
    for row in csv_f: 
     if 'DCX3520E' in row[0] and 'NULL' not in row[6]: 
      dcx = row[0] + " " + row[6] 
      ... 
+0

はい、私の最大の間違いは、forループの中でそれを開き、" w "モードでも、" a "-appendモードであったはずです。 –

4

forループ内で書込みモードでファイルを開いている場合に、私が見る最大の問題です。書き込みモードでファイルを開くたびに、ファイルを空にしてそこにあるすべてのファイルを削除します。

次のように2つの明確な解決策があります:APPENDで

  1. はあなたwithライン最も外側のコンテキスト
  2. を作るオープン( 'A')モードの代わりに。

初めてこの問題に近づいているようだから、私は意図的に完全なソリューションを投稿することを避けるつもりです。私はここで何が起こっているのかを理解し、それを自分で修正しようとすることが重要だと思います。

+0

ありがとう、それに続き、私の解決に到着しました –

+0

@ChetanV Excellent!それを聞いてうれしい。 Jon Clementsが言及したように、あなたはおそらく 'writelines 'の問題にぶつかるでしょう。具体的には改行文字を追加しないので、あなた自身で追加したいと思うでしょうし、代わりに 'write'を使うかもしれません。 –

+0

非常に真実な、筆記線はすべての出力を同じ行に書きます。はい私は自分のやり方でそれを変更するために書き込みを使用しました。ありがとう、 –

3

open("out.txt","w")を呼び出すと、上書きモードでファイルが開きます。ここでは、open("out.txt","a")を使用して追加することができますが、そのたびにファイルを再度開く必要がある場合にのみ追加してください。その向こうには、それはあなたが本当にいずれかを意味するものだと同様に `.writelinesは()`を見ていないことを...あなたが考える」すなわち

with open("out.txt","w") as out_file: 
    for row in csv_f: 
     if 'DCX3520E' in row[0] and 'NULL' not in row[6]: 
      dcx = row[0] + " " + row[6] 
      aa = dcx[9:] 
      print(aa) 
      out_file.writelines(aa) 
+0

ありがとう、それは期待どおりに動作します –

関連する問題