首页 > 解决方案 > 从 CSV 文件中提取包含另一个 CSV 文件中的任何值的行

问题描述

一段时间以来,我一直在努力解决这个特定问题:

我有一个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)

标签: pythonpython-2.7filecsv

解决方案


您需要做的是从 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 匹配


推荐阅读