2015-01-02 2 views
1

을 두 CSV 파일을 비교하고 일치를 찾아내가</p> <p>CSV1 같은 두 개의 CSV 파일이 파이썬

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

organs.csv

나는 파일을 모두 비교해야 이 [팔, 팔뚝, 심장, 다리]와 같은 출력 목록을 얻지 만, 현재 작업하고있는 스크립트는 출력을 제공하지 않습니다 (동일한 다리에서 생검과 혼합 되어도 다리를 출력하고 싶습니다). 세포). 지금까지 코드가 있습니다. 일치하는 모든 단어를 어떻게 얻을 수 있습니까?

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 

답변

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 파일을 반복하는 것은 다음과 같이 아이템 (문자열)의리스트는 로우를 반환 [ '생검'아암 ' , '팔뚝'], 그래서 당신은 모든 항목을 삽입하는 목록을 합계해야합니다.

반면에 중복을 제거하려면 set() 함수를 통해 한 세트의 변환 만 필요하며 교차 메소드는 요소가있는 다른 세트를 반환합니다.

+0

감사합니다. 그러나 그것은 여전히 ​​출력에서 ​​나에게 '다리'를주지 않습니다. – abn

+0

네가 맞다. 이 방법을 사용하려면 두 가지 방법이 있습니다. 1) csv1.csv에서 다리 단어 뒤에 쉼표를 추가하십시오. 2) csv1.csv의 각 요소에 단어로 나눕니다. 답을 편집하여 작동하도록하겠습니다. – avenet

+0

완벽! 고맙습니다 :) – abn

0

CSV 파일을 텍스트 파일로 처리하고 첫 번째와 초의 모든 단어 목록을 얻은 다음 첫 번째 목록을 반복하여 두 번째 목록에 정확히 일치하는지 확인합니다.

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) 
관련 문제