【问题标题】:Extract rows from a CSV file that contain any of the values from another CSV file从 CSV 文件中提取包含另一个 CSV 文件中的任何值的行
【发布时间】:2018-06-16 16:14:06
【问题描述】:

一段时间以来,我一直在为这个特殊问题苦苦挣扎:

我有一个output.csv 文件,如下所示:

还有一个像这样的07.csv 文件:

我想做的是从 output.csv 文件中的 mmsi 列中获取值,并检查这些值中的任何一个是否在 07.csv 的任何行中,然后将这些行提取到新的 results072.csv 文件中。 到目前为止,这是我的代码,但它做了一件非常奇怪的事情:它以某种方式使这个新文件与 07.csv 一样大,并且包含更多值的行的外观。 我真的很感激一些反馈!提前谢谢!

import csv
with open('output.csv') as hashes:
    hashes = csv.reader(hashes,delimiter = ',')
    hashes = set(col[1] for col in hashes)
    hashi= list(hashes)

with open('07.csv') as input_file, open('result072.csv', 'w') as output_file: 
    reader = csv.reader(input_file,delimiter = ',')
    writer = csv.writer(output_file,delimiter = ',')

for row in reader:
    if any(item in row for item in hashi):
        writer.writerow(row)

【问题讨论】:

  • 您的 python 代码看起来很无格式 - 请您再检查一下格式吗?
  • 我重新格式化了 - 在审批队列中等待
  • 我无法测试您的代码,因为我无法将图像加载到我的文本编辑器中。但看起来第一个 CSV 的 mmsi 值都没有在第二个 CSV 中重复,因此您的程序应该不会产生任何输出。也许你应该给我们一些更好的示例输入,并以文本形式,以便我们实际使用它。
  • @PM 2Ring These are two lines in the 07.csv : time sog y x mmsi 1420598820 0.10000000149011612 54.635935 -8.439985 250000527 1420664100 2.9000000953674316 54.44025 11.382183333333 211312240 And these two are from output.csv imo mmsi name flag type 9107617 211312240 GLAUBE DE Fishing 9040675 250000527 F/V RACHEL IE Fishing Vessel 抱歉格式错误 我仍在学习如何绕过这里。感谢您的帮助!

标签: python python-2.7 file csv


【解决方案1】:

您需要做的是从 output.csv 文件中获取所有 mmsi 值并逐步检查 07.csv,将每个条目与所有 mmsi 值进行比较。如果匹配,则将该行写入新文件。

any函数我不是很擅长,所以我手动尝试了。

import csv

with open('output.csv') as hashes:
    csv_data = csv.reader(hashes, delimiter = ',')
    mmsi_set = set(col[1] for col in csv_data)
    mmsi_list = list(hashes)


with open('07.csv') as input_file, open('result072.csv', 'w') as output_file: 
    reader = csv.reader(input_file, delimiter = ',')
    writer = csv.writer(output_file, delimiter = ',')

    for row in reader:
        for mmsi in mmsi_list:
            if mmsi == row[4]:
                writer.writerow(row)

上述代码应将 07.csv 的任何行写入新文件 result072.csv,其中 output.csv 中的 mmsi 与 07.csv 的 mmsi 匹配

【讨论】:

  • 我的代码似乎在做同样的事情——不知何故,在 result072.csv 文件中,我得到的比我应该得到的多(例如,如果有 9 行有 235067469,它不知何故似乎有result072.csv 中有 101 行,这很奇怪,我不知道为什么..
  • 抱歉之前的评论,我仍然有我的旧 result072.csv 我试图运行它,但 result072.csv 似乎是空的,即使手动检查时应该有一些匹配项。会是什么?非常感谢您的帮助,这是我的论文! :)
  • 如果您能提供一些测试数据,我将能够检查问题隐藏在哪里。
  • 嘿,谢谢,我设法解决了,问题不是代码..我用来打开 .csv 文件的应用程序没有显示超过 65535,我没有考虑是一个限制..
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多