比较两个CSV文件并查找匹配的Python

时间:2015-01-02 22:47:46

标签: python list csv compare string-matching

我有两个类似

的CSV文件

CSV1

H1,H2,H3
arm,biopsy,forearm
heart,leg biopsy,biopsy

organs.csv

arm
leg
forearm
heart
skin

我需要比较两个文件并得到一个像[arm,forearm,heart,leg]这样的输出列表,但我目前正在处理的脚本并没有给我任何输出(我想要的)腿也在输出中,虽然它在同一细胞中与活组织检查混合)。这是迄今为止的代码。我怎样才能得到所有匹配的单词?

import csv
import io

alist, blist = [], []

with open("csv1.csv", "rb") as fileA:
    reader = csv.reader(fileA, delimiter=',')
    for row in reader:
        alist.append(row)
with open("organs.csv", "rb") as fileB:
    reader = csv.reader(fileB, delimiter=',')
    for row in reader:
        blist.append(row)

first_set = set(map(tuple, alist))
secnd_set = set(map(tuple, blist))

matches = set(first_set).intersection(secnd_set)
print matches

3 个答案:

答案 0 :(得分:1)

试试这个:

import csv

alist, blist = [], []

with open("csv1.csv", "rb") as fileA:
    reader = csv.reader(fileA, delimiter=',')
    for row in reader:
        for row_str in row:
            alist += row_str.strip().split()

with open("organs.csv", "rb") as fileB:
    reader = csv.reader(fileB, delimiter=',')
    for row in reader:
        blist += row

first_set = set(alist)
second_set = set(blist)

print first_set.intersection(second_set)

基本上,通过csv阅读器遍历csv文件会返回一行,这是一个项目(字符串)列表,如[' arm',' biopsy',' ;前臂'],所以你必须对列表进行求和以插入所有项目。

另一方面,要删除重复项,只需要通过set()函数进行一次设置转换,并且intersection方法返回另一个包含元素的集合。

答案 1 :(得分:1)

将零件读数从csv1.csv更改为:

with open("csv1.csv", "rb") as fileA:
    reader = csv.reader(fileA, delimiter=',')
    for row in reader:
        # append all words in cell
        for word in row:
            alist.append(word)

答案 2 :(得分:0)

我会将CSV文件视为文本文件,获取第一个和秒中所有单词的列表,然后遍历第一个列表以查看是否与第二个列表中的任何内容完全匹配。