从CSV文件中提取包含其他CSV文件中任何值的行

时间:2018-06-16 16:14:07

标签: python python-2.7 file 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)

1 个答案:

答案 0 :(得分:0)

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