【问题标题】:selecting specific rows from an unstructured csv file and writing to another file using python从非结构化 csv 文件中选择特定行并使用 python 写入另一个文件
【发布时间】:2013-12-23 17:29:31
【问题描述】:

我正在尝试遍历一个非结构化的 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))

我无法超越这一点。

【问题讨论】:

    标签: parsing csv python-3.x


    【解决方案1】:

    你快到了:

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

    【讨论】:

      【解决方案2】:

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

      要创建另一个仅包含这些行的 csv 文件,您只需将通过所有检查的每一行写入另一个打开的文件以进行输出 - 而不是打印行,或者除了打印行之外。这是将行写入另一个文件的一种非常简洁的方法。

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

      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'file的内容:

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

      【讨论】:

      • 非常感谢,Martineau..这很有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多