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
キーが分割の最初の値が、リストには残りの部分を追加します。それはヒントです、そうでなければ何をしましたか?あなたはテキストファイル、リストと文字列操作を処理する方法を見てきましたか?コードはありますか? –
あなたの試行を見せてください – yash
あなたは何かを試しましたか、それとも私たちにあなたのためにこれをするように求めていますか? –