python通过串联方式逐行合并到文档

python通过串联方式逐行合并到文档,python,python-2.7,merge,concatenation,Python,Python 2.7,Merge,Concatenation,如何连接这两个文本文档? 文件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 1000001 161:0.115664 207:0.1

如何连接这两个文本文档?

文件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
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
文件2:

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
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
结果:

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
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的结构相同,行数相同。
每行以一个数字开头(两个文件中的数字相同),然后我们在每行中有几个项目,它们由一个数字+冒号+小数组成:
示例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(' ')[0]

for key in dat1.keys():
    print("%s,%s,%s" % (key, str.join(' ', dat1[key]), str.join(' ', dat2[key])))
但我在第9行得到的索引的回溯错误超出了范围

更新2: 下面是更正的代码:

dat1 = {}
with open('stem.data') as f:
    for line in f.readlines():
        dat1[line.split(' ')[0]] = line.strip().split(' ')[1:]

dat2 = {}
with open('stem.info') 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])))
但最后一行我又犯了一个错误!然而,很明显,连接是在我目视检查了几行之后完成的;但由于错误而停止
您能告诉我这里出了什么问题吗?

使用这个:

for key in (set(dat1) | set(dat2)):
    print(key, ' '.join(dat1.get(key, '')), ' '.join(dat2.get(key, '')))
这就是将
join
应用于数组的方式(这里不需要字符串格式)

对于键入(set(dat1)| set(dat2))
将迭代两个字典中的所有键

使用
.get
可以确保在只有一个文件具有该密钥的情况下,只选择其内容(并且不会抛出错误)



另外,对于f.readlines()中的行,
可以缩短为f:中的行的
。这将以同样的方式迭代行(以新行分隔)。

请包含您尝试的代码并解释您面临的问题。我投票将此问题作为主题外的问题来结束,因为这不是一项代码编写服务。在编写代码时,请查看字符串拆分、列表、词典等内容,对于循环,您不能连接两个文件。您正在使用从两个文件收集的数据创建一个新文件。因此,您必须解析这两个文件,然后创建一个新文件。你尝试了什么?@zvone我更新了我的问题并添加了我的尝试。你能看一下并告诉我问题是。我怎样才能把我的输出保存到一个文件中而不是打印它?我仍然得到一个关键错误!为什么会这样?当文档二键没有任何内容要添加到第一个文档时,就会发生这种情况。就像上面的例子一样。