2017-08-08 109 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

那'.writelines()'看起来并不像它就是你真正的意思要么...想你真的在'.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”模式。 –

4

最大的问题,我可以看到,如果你打开你的文件在你的for循环写模式。每次以写入模式打开文件时,您都会清空文件并删除当前所有文件。

两个明确的解决方案如下:

  1. 让您with线最外层的情况下
  2. 打开以附加(“A”)模式,而不是。

由于您第一次看到您正在接近这个问题,我将故意避免发布完整的解决方案。我认为了解这里发生的事情并尝试自己解决这一点很重要。

+0

谢谢,跟着它到达我的解决方案 –

+0

@ChetanV优秀!听到那个消息很开心。就像Jon Clements所说,你可能也会遇到'writelines'的问题。具体来说,它不会添加新行分隔符,因此您需要自己添加它们,并可能使用“write”。 –

+0

非常真实的,writelines会将所有输出写入同一行,并且是的,我使用写入来改变它的方式。谢谢 –

3

调用open("out.txt","w")以覆盖模式打开文件。在这里,您可能想要使用open("out.txt","a")进行追加,但前提是您有足够的理由每次重新打开文件。除此之外,它的最佳实践来打开文件,写了很多次,然后将其关闭即

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

谢谢,它按预期工作 –