2014-09-04 4 views
1

두 개의 파일에 key와 value가 있습니다. 해당 keyvalue과 병합하려고합니다. 키는 두 파일 모두에 있으며 value1file1value2file2입니다.병합 Dict 키 값

key value1 value2 

코드 : 여기

from collections import defaultdict 

d2 = {} 

with open('file2.txt', 'r') as file2: 
    for row in file2: 
     cols = row.strip().split() 
     #print(cols); 
     key = cols[0], cols[1] 
     value1 = cols[4] 
with open('file1.txt', 'r') as file1: 
    for row in file1: 
     cols = row.strip().split() 
     #print(cols); 
     key = cols[0], cols[1] 
     value2 = cols[2] 

     print ("%s %s %s %s\n" % (d2[cols[0]], d2[cols[1]], d2[cols[4]], d2[cols[2]])) 

Error: 

Traceback (most recent call last): 
    File "test_two.py", line 21, in <module> 
    print ("%s %s %s %s\n" % (d2[cols[0]], d2[cols[1]], d2[cols[4]], d2[cols[2]])) 
KeyError: '3545' (first line) 
+1

그것은'd.items()'이어야합니다. –

+1

파이썬 2.7을 사용하고 있으므로'd.iteritems()'를 사용했는데 오류가 있습니다. –

+1

아야! '행을위한'이어야합니다. 그러나 파일에 3 열만 포함되어 있기 때문에 value2 = cols [4]에'IndexError'를 얻을 것입니다. –

답변

2
for d in (file1,file2): 

f가 하나의 파일은 내가 이런 식으로 뭔가를 얻으려고 노력하고 col[0] col[1]

에 많은 열 두 파일 key이 귀하의 파일 중. 이 파일을 반복하는 경우

for key, value in d: 

, 당신은 라인 (문자열)을 얻는다. 행 (문자열)을 반복 할 때 문자는이됩니다. 따라서 파일의 모든 줄이 2 자 길이가 아니면 for key, value in d이 실패합니다.

나머지 코드 (cols = row.strip().split())는 올바르게 보이지만, row의 출처는 확실하지 않습니다. Ashwini Chaudhary가 말했듯이, 당신은 아마도 원했을 것입니다. for row in d

+0

코드를 변경했습니다. 앞의 코드에서'col [4]'는 어떤 파일에서 가져 왔는지 명확하지 않았습니다. –