使用Python将csvfile中的匹配行写入新的csv文件

时间:2016-04-09 12:37:02

标签: python csv split match keyword

我是python的新手,我试图通过匹配特定字符串来减少csv文件记录。我想将匹配的行写入新的csv文件。

以下是一个示例数据集:

dataset screenshot

我想要做的是搜索特定匹配关键字的所有行(例如,只将包含WARRANT ARREST的行写入图像中)可以查找到新的csv文件。

这是我目前的代码:

import csv
with open('test.csv', 'a') as myfile:
        with open('train3.csv', 'rb') as csvfile:
            spamreader = csv.reader(csvfile, delimiter=',')
            for r in spamreader:
                for field in row:
                    if field == "OTHER OFFENSES":
                        myfile.write(r)

test.csv为空,train3包含所有记录。

2 个答案:

答案 0 :(得分:0)

尝试以下方法,由于无法复制/粘贴数据,因此测试有点困难:

import csv

with open('test.csv', 'a', newline='') as f_outputcsv, open('train3.csv', 'r') as f_inputcsv:
    csv_spamreader = csv.reader(f_inputcsv)
    csv_writer = csv.writer(f_outputcsv)

    for row in csv_spamreader:
        for field in row:
            if field == "WARRANT ARREST":
                csv_writer.writerow(row)
                break

这使用csv.writer实例将整行写回输出文件。

答案 1 :(得分:0)

通过简单地添加一些else语句,您通常可以了解很多事情。例如,在if field == "OTHER OFFENSES":之后,您可以写else: print(field)else: print(r)。一旦看到实际数据,您的比较失败可能会变得很明显。

在每一行之后可能还会有一个换行符,这会影响比较(这是上次有人问起这个问题的原因,我回答了)。也许python看到OTHER OFFENSES\n不等于OTHER OFFENCES。要匹配这些,请使用不太严格的比较或strip()字段。

尝试将if field == "OTHER OFFENSES"替换为if "OTHER OFFENSES" in field:。当您执行==时,您要求完全匹配,而something in something_else将搜索something的整行文字。