如何加入这两个文本文档?
文档 1:
1000001 10:0.471669 250:0.127552 30:0.218773 64:0.249413
1000002 130:0.0839656 107:0.185613 30:0.446355 110:0.38011
1000003 1:0.0835855 1117:0.0647112 302:0.0851354 46:0.0601825 48:0.098907 516:0.167713
文档 2:
1000001 161:0.115664 207:0.136537 294:0.0974809 301:0.199868
1000002
1000003 555:0.0585849 91:0.0164101
结果:
1000001 10:0.471669 250:0.127552 30:0.218773 64:0.249413 161:0.115664 207:0.136537 294:0.0974809 301:0.199868
1000002 130:0.0839656 107:0.185613 30:0.446355 110:0.38011
1000003 1:0.0835855 1117:0.0647112 302:0.0851354 46:0.0601825 48:0.098907 516:0.167713 555:0.0585849 91:0.0164101
解释:
文档 1 和 文档 2 结构相同,行数也相同。
每行以数字开头(两个文档中的数字相同), 然后我们在每一行中有几个项目,由一个数字+冒号+一个十进制数组成:
example 10:0.471669
这些项目组合是唯一的,我想做的是将它们合并在一起:从第二个文档中取出每一行的项目,并将其放入第一个文档的相应行中。
注意:
开头的初始数字和彼此之间的项目由一个空格分隔。
更新
这是我的尝试:
dat1 = {}
with open('doc1') as f:
for line in f.readlines():
dat1[line.split(' ')[0]] = line.strip().split(' ')[1:]
dat2 = {}
with open('doc2') as f:
for line in f.readlines():
key = line.split(' ')[0]
dat2[key] = line.split(' ')[1:]
for key in dat1.keys():
print("%s %s %s" % (key, str.join(' ', dat1[key]), str.join(' ', dat2[key])))
当该行没有任何要添加到第一个文档时,我在第二个文档的行上得到了 KeyError 的回溯。上例中第二个文档的第二行就是这种情况。
如何逃避这个异常?转义只有键而没有其他要添加的行?
请您参考如下方法:
更简单的方法可能是使用 defaultdict列表:
from collections import defaultdict
data = defaultdict(list)
for filename in 'doc1', 'doc2':
with open(filename) as f:
for line in f:
key, _, value = line.partition(' ')
data[key.strip()].append(value.strip())
for key in sorted(data):
print key, ' '.join(data[key]) # Python 2
# print(key, *data[key]) # Python 3
关于您可以添加的结果的打印:
from __future__ import print_function
到你的文件的顶部,然后 Python 3 print() 函数将在 Python 2 中可用,即你可以使用上面的 Python 3 打印。
您在评论中询问了如何打印到文件(导入 print_function 后的 Python 3 或 Python 2):
with open('outfile.txt', 'w') as f:
for key in sorted(data):
print(key, *data[key], file=f)
