从非结构化csv文件中选择特定行并使用python写入另一个文件

时间:2013-12-23 17:29:31

标签: parsing csv python-3.x

我正在尝试迭代一个未经破坏的csv文件(它没有特定的标题)。该文件由仪器生成。我需要选择具有特定列值的特定行并创建另一个文件。以下是文件布局的示例

  ,success, (row1)

1,2,protocol (row2)

78,f14,34(row3)

,67,34(row4)

,f14,34(row5)

3,f14,56,56(row6)

我需要选择'fi4'值的所有行。以下是代码

import csv
import sys
reader = csv.reader(open('c:/test_file.csv', newline=''), delimiter=',', quotechar='|')
for row in reader:
      print(','.join(row))

我无法超越这一点。

2 个答案:

答案 0 :(得分:1)

你几乎就在那里:

for row in reader:
    if row[1] == 'f14':
        print(','.join(row))

答案 1 :(得分:0)

您只需通过检查列的值来检查并查看该行是否是您感兴趣的行,看看它是否是您要查找的内容。这可以通过简单的if row[1] == 'f14'条件语句来完成。然而,这会在任何空行上失败 - 它看起来像你的输入文件可能有 - 所以你需要在前面检查另一个以确保该行至少包含那么多列。

要创建另一个只包含其中行的csv文件,您需要将通过所有检查的每一行写入另一个为输出打开的文件 - 而不是打印出行。这是将行写入另一个文件的非常简洁的方法。

(注意:我不确定为什么在quotechar='|'调用的代码中有csv.reader(),因为输入文件中没有任何引号字符,所以我把它留了在下面的代码中 - 您可能需要将其添加回来,如果确实存在,那将是什么。)

import csv

with open('test_file.csv', newline='') as infile, \
     open('test_file_out.csv', 'w', newline='') as outfile:

    csv.writer(outfile).writerows(row for row in csv.reader(infile)
                                    if len(row) >= 2 and row[1] == 'f14')

之后'test_file_out.csv'文件的内容:

78,f14,34(row3)
,f14,34(row5)
3,f14,56,56(row6)