2017-09-13 17 views
0

첫 번째 file1.csv를 통해 읽고 싶습니다. 정책이 file2.csv에 있으면 정책의 특정 ID를 가져 와서 가져옵니다. file3.csv에서 해당 정책 ID의 개수. 아래 그림과 같이 그래서 나는 SO 결국 내 최종 출력 파일이나 CSV에 저장된 다음과 같이 보일 것이다 유사한 행 하나의 CSV 파일에서 파이썬 읽기 요소가 일치하면 다른 CSV에서 해당 행을 검색

file2.csv 
Name Policies 
Raj 12345, 676, 909 
Sam 786 
Lucy 899, 7676, 09 

file2.csv 
Policies  ID 
676, 8787  212 
909,898,707 342 
89, 98,09  345 

file3.csv 
ID Count 
212 56 
342 23 
345 07 

의 수천을 가지고있는 3 개 CSV 파일 file1.csv file2.csv file3.csv 있습니다. 팬더, NumPy와 또는 아무것도

Final.csv 
Name tuple of [Policies, ID, Count] 
Raj  [676,212,56] 
Raj  [909, 342, 23] 
Lucy [09, 345, 07] 

나는 아래의 코드와 붙어있어 사용할 수 :이 작업을 수행하는

policyid = csv.reader('file2.csv', delimiter=',') 
with open('file1.csv', 'r') as f: 
    reader = csv.DictReader(f) 
    for row in reader: 
     data = row['Policies'].split(",") 
     if data: 
      for policy in data: 
       for policy, id in policyid: 
        data2 = policy.split(",") 
         if policy in data2: 
          print id 
+0

@roganjosh 내가 코드를 업데이트했다. 나는 for 루프에 갇혀있다. 거기에 열이 있기 때문에 각 목록 요소를 통해 구문 분석 약간 혼란 요소의 목록입니다 – Rachel

답변

0

한 가지 방법, 세 CSV 파일을 읽어 파일 1의 값을 잡아하는 것입니다, 그 값을 얻기 위해 file2와 file3을 스캔하십시오. 필드의 쉼표로 구분 된 목록은 반 패턴이므로 텍스트를 파싱하는 데 추가 작업을해야하기 때문에 이것은 매우 어려운 일입니다.

세 가지 CSV 파일을 모두 SQL 테이블이나 데이터 프레임에로드하고 일부 JOIN을로드하는 다른 방법이 있지만 쉼표로 구분 된 목록으로 인해이 작업이 어려워집니다. 이 인정 하듯이 지저분하지만

여기, 내가 설명하고있는 무슨의 예 :

import csv 

with open('file1.csv') as f: 
    reader = csv.DictReader(f) 
    next(reader) # Skip header 
    file1 = [row for row in reader] 
with open('file2.csv') as f: 
    reader = csv.DictReader(f) 
    next(reader) # Skip header 
    file2 = [row for row in reader] 
with open('file3.csv') as f: 
    reader = csv.DictReader(f) 
    next(reader) # Skip header 
    file3 = [row for row in reader] 


def get_policy_id(policy): 
    for line in file2: 
     policies = line['policies'].split(', ') 
     if policy in policies: 
      return line['ID'] 


def get_id_count(id): 
    for line in file3: 
     if id == line['id']: 
      return line['count'] 


output = [] 
for line in file1: 
    policies = line['policies'].split(', ') 
    for policy in policies: 
     id = get_policy_id(policy) 
     count = get_id_count(id) 
     output.append({'name': line['name'], 
         'policy': policy, 
         'id': id, 
         'count': count}) 
+0

이것은 일했습니다 !! 고맙습니다. – Rachel