【问题标题】:Write matching rows in csvfile to a new csv file using Python使用 Python 将 csv 文件中的匹配行写入新的 csv 文件
【发布时间】:2016-04-09 12:37:02
【问题描述】:

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

这是一个示例数据集:

我要做的是通过搜索所有行以查找特定匹配的关键字(例如,仅将包含 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 包含所有记录。

【问题讨论】:

  • 您通常可以通过简单地添加一些else 语句来了解正在发生的事情。例如,在if field == "OTHER OFFENSES": 之后,你可以写else: print(field)else: print(r)。一旦您看到实际数据,您的比较失败的原因可能会变得很明显。例如。每一行之后可能会有一个换行符,这会弄乱比较(这是上次有人问这个问题而我回答的问题的原因)。除了if field == "OTHER OFFENSES",你可以试试if "OTHER OFFENSES" in field:
  • 在您的数据集示例中,没有一个字段等于 "OTHER OFFENSES"。所以你会期望输出文件是空的。
  • 您的具体问题是什么?

标签: python csv split match keyword


【解决方案1】:

您通常可以通过简单地添加一些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

【讨论】:

    【解决方案2】:

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

    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 实例将整行写回您的输出文件。

    【讨论】:

    • 谢谢马丁,效果很好!我只需要将参数 ab 更改为 a 并将 rb 更改为 r!
    • 太好了,您使用的是 Python 3 吗?如果是这样,最好是'a', newline=''
    • 是的,我正在使用 Anaconda - python 3.5。再次感谢!
    • 很高兴为您提供帮助,别忘了点击答案旁边的灰色勾号以接受解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多