只有第一行输出打印到我的文本文件

时间:2017-08-08 15:42:51

标签: python

我有一个文本文件,我读了然后我提取了我需要的数据并尝试将其发送到不同的新文本文件,但只有第一行进入新的文本文件。

    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)

3 个答案:

答案 0 :(得分:4)

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

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

  1. 让您的with行成为最外层的背景
  2. 改为打开(' a')模式。
  3. 由于您第一次似乎正在接近此问题,我会故意避免发布完整的解决方案。我认为您了解此处发生的事情并尝试自行解决这一点非常重要。

答案 1 :(得分:4)

调用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)

答案 2 :(得分: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]
            ...