2017-11-01 2 views
0

두 개의 텍스트 파일을 병합하고 싶습니다. 첫 번째 텍스트 파일의 모든 행과 두 번째 텍스트 파일의 값이 모두 포함 된 사전을 병합합니다. 가능한 경우 텍스트 파일. 누군가 제발 도와 줄 수 있니? 예를 들어 두 개의 텍스트 파일을 파이썬에서 사전에 병합

,

해서 a.txt는 다음과 같습니다

apple 5 7e-6 na 2.2 
banana 9 3e-2 2 2.1 
orange na 9.2 2.1 na 

b.txt은 다음과 같습니다

orange 5 6.2 na 6e-3 nd 
mango 4 7.3 na 7 3 
apple 4 4.4 4.3 na 2 

내가 그렇게 파이썬에서 이러한 두 개의 텍스트 파일을 병합 할 다음과 같이 출력됩니다.

apple 5 7e-6 na 2.2 4 4.4 4.3 na 2 
banana 9 3e-2 2 2.1 na na na na na 
orange na 9.2 2.1 na 5 6.2 na 6e-3 nd 

나는 두 개의 텍스트 파일을 두 개의 사전을 만들고 그들을 함께 추가 TEH 다음 코드를 사용하여 시도 :

with open('a.txt', 'r') as document: 
    a = {} 
    for line in document: 
     if line.strip(): # non-empty line? 
      key, value = line.split(None, 1) 
      a[key] = value.split() 

with open('b.txt', 'r') as document: 
    b = {} 
    for line in document: 
     if line.strip(): # non-empty line? 
      key, value = line.split(None, 1) 
      b[key] = value.split() 

def combineDict(*args): 
    result = {} 
    for dic in args: 
     for key in (result.viewkeys() | dic.keys()): 
      if key in dic: 
       if type(dic[key]) is list: 
        result.setdefault(key, []).extend(dic[key]) 
return result 

final = combineDict(a,b) 

을하지만이

+1

키 분할의 첫 번째 값이며, 목록은 나머지를 추가합니다. 그게 암시 야, 그렇지 않으면, 너 무슨 짓을 한거야? 텍스트 파일,리스트 및 문자열 연산을 처리하는 방법을 찾았습니까? 코드가 있습니까? –

+1

귀하의 시도를 보여주십시오. – yash

+0

전혀 시도한 적이 없습니까, 아니면 그냥 우리에게 당신을 대신해달라고 요청 했습니까? –

답변

0

('망고'등)도 두 번째 텍스트 파일의 모든 값을 유지 한 번에 하나의 파일을 읽고 키와 값으로 분할 된 각 행에 대해 그리고 그 값을 데이터베이스의 해당 키에 추가하십시오.

#!/usr/bin/env python3 

import io 

file_a = io.StringIO("""apple 5 7e-6 na 2.2 
banana 9 3e-2 2 2.1 
orange na 9.2 2.1 na""") 

file_b = io.StringIO("""orange 5 6.2 na 6e-3 nd 
mango 4 7.3 na 7 3 
apple 4 4.4 4.3 na 2""") 

def dict_from_file(f): 
    def line_splitter(line): 
     items = line.strip().split() 
     return items[0], items[1:] 
    # To use filenames, change 'f' above to filename and 
    # use this line: 
    # with open(filename) as f: 
    return {k:v 
      for line in f 
      for k, v in (line_splitter(line),)} 

# Read in initial file 
d = dict_from_file(file_a) 
# For each additional file append values for already 
# existing keys. Extend all values to be the same 
# length, filling with 'na'. 
files = file_b, 
for f in files: 
    max_length = 0 
    for k, v in dict_from_file(f).items(): 
     if k in d: 
      d[k].extend(v) 
      max_length = len(d[k]) 
    for v in d.values(): 
     v += ['na'] * (max_length - len(v)) 

for k, v in d.items(): 
    print(('{:12} ' + '{:6}' * len(v)).format(k, *v)) 

출력 :

apple  5  7e-6 na 2.2 4  4.4 4.3 na 2  
banana  9  3e-2 2  2.1 na na na na na  
orange  na 9.2 2.1 na 5  6.2 na 6e-3 nd  
+0

안녕하세요 Harvey .. 고맙습니다. .. 이걸 시도했지만 말합 .. 'k, * v in (line.strip(). split(),)' ^ 'SyntaxError : invalid syntax' 만약 내가 앞에 v를 붙이고 그 다음에 sy을 넣었다면 'ValueError : 풀어 야 할 값이 너무 많습니다. ' – Pia

+0

파이썬 2를 사용하고 있습니까? 파이썬 2에서 작동하도록 변경했습니다. 파이썬 3을 사용해야합니다. 2보다 훨씬 뛰어나고 2는 더 이상 지원되지 않거나 곧 지원 될 것입니다. – Harvey

+0

작품 : 감사합니다 톤 .. – Pia

관련 문제