2017-11-01 12 views
0

私は最初のテキストファイルと2番目のテキストファイルの両方の値を持つ最初のテキストファイルのすべての行を持つように辞書にマージしたい2つのテキストファイルを持っていますテキストファイル(存在する場合)。誰かが助けてくれますか?2つのテキストファイルをPythonの辞書にマージ

例えば、

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 

私はそうのpythonでこれらの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 

私は2つのテキストファイルのための2つの辞書を作り、それらを一緒に追加して、TEH次のコードを使用してみました:

+1

キーが分割の最初の値が、リストには残りの部分を追加します。それはヒントです、そうでなければ何をしましたか?あなたはテキストファイル、リストと文字列操作を処理する方法を見てきましたか?コードはありますか? –

+1

あなたの試行を見せてください – yash

+0

あなたは何かを試しましたか、それとも私たちにあなたのためにこれをするように求めていますか? –

答えて

0

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) 

をしかし、これはあまりにも(「マンゴー」のような)2番目のテキストファイル内のすべての値を保持します一度に1つのファイルを読み込み、各行についてキーと値に分割し、その値をデータベースのそのキーに追加します。

#!/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

こんにちはハーベイ..ありがとう..私はこれを試してみましたが、それは言う.. 'k、* v in(line.strip()。split()、)' ^ 'SyntaxError:無効な構文' もし私がvの前に*をつけていたら、それはsyas 'ValueError:解凍する値が多すぎます' – Pia

+0

Python 2を使っていますか?私はPython 2で動作するように変更しました。Python 3を使用している必要があります.2よりもずっと優れていて、2はサポートされなくなっています。 – Harvey

+0

が動作します:)感謝します。トン.. – Pia

関連する問題