在python中交叉引用两个csv文件

时间:2018-03-03 20:19:18

标签: python

因此,我已经转向本网站上的天才。

我希望能够做的是拥有两个单独的csv文件。其中一个有一堆商店名称,另一个有黑名单商店。

我希望能够运行一个python脚本来读取列出的黑色' sheet,然后检查这些特定名称是否在另一个工作表内,如果是,则从主工作表中删除它们。

我已经尝试了大约两天,并且不能让我的生活得到它的工作。所以我来找你们帮助我。

非常感谢。

p.s如果你可以对剧本中的内容发表评论,那么我知道发生了什么,我们将不胜感激。

编辑:我删除了原来的代码,但希望这会让你知道我想要做什么。 (我也意识到这完全不正确)

import csv

with open('Black List.csv', 'r') as bl:
    reader = csv.reader(bl)

    with open('Destinations.csv', 'r') as dest:
        readern = csv.reader(dest)

        for line in reader:
            if line in readern:
                with open('Destinations.csv', 'w'):
                    del(line)

2 个答案:

答案 0 :(得分:0)

您需要注意的第一件事是您无法更新您正在阅读的文件。文本文件(包括.csv文件)不会那样工作。因此,您必须将整个Destinations.csv读入内存,然后以新名称再次写出来,但跳过您不想要的行。 (你可以覆盖你的输入文件,但你会很快发现这是一个坏主意。)

import csv

blacklist_rows = []
with open('Black List.csv', 'r') as bl:
    reader = csv.reader(bl)
    for line in reader:
        blacklist_rows.append(line)

destination_rows = []
with open('Destinations.csv', 'r') as dest:
    readern = csv.reader(dest)
    for line in readern:
        destination_rows.append(line)

现在,此时您需要遍历destination_rows并删除与blacklist_rows中匹配的内容,并写出其余部分。我无法建议匹配测试应该是什么样子,因为您还没有向我们展示您的输入数据,因此我实际上并不知道blacklist_rowsdestination_rows包含

with open('FilteredDestinations.csv', 'w') as output:
    writer = csv.writer(output)
    for r in destination_rows:
        if not r:   # trap for blank rows in the input
            continue
        if r *matches something in blacklist_rows*: # you have to code this
            continue
        writer.writerow(r)

答案 1 :(得分:0)

你可以尝试Pandas

import pandas as pd

df1 = pd.read_csv("Destinations.csv")
df2 = pd.read_csv("Black List.csv")

blacklist = df2["column_name_in_blacklist_file"].tolist()

df3 = df2[~df2['destination_column_name'].isin(blacklist)]

df3.to_csv("results.csv")
print(df3)