在python中连接不同文件的行

时间:2018-04-20 19:24:48

标签: python join row

如果是text1

1 2 3
1 2 3 4
1 2 3
1

text2的

4 5 6 7
5 6 7 8
4 5
2 3 4 5 6

和text3

8 9 10 11
9
6 7 8
7

将不同文件的行连接在一起并将生成的文本写入文件的最直接方法是什么?

1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7

我尝试循环浏览文件并使用file.read()但这会垂直合并文件

2 个答案:

答案 0 :(得分:2)

另一个选项是使用zip来合并文本文件中的行:

with open('text1', 'r') as f1:
    t1 = f1.readlines()

with open('text2', 'r') as f2:
    t2 = f2.readlines()

with open('text3', 'r') as f3:
    t3 = f3.readlines()

for item in zip(t1,t2,t3):
    print ' '.join([line.strip() for line in item])

结果:

1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7

修改:更通用的解决方案:

files = ['text1', 'text2', 'text3']

contents = []

for f in files:
    with open(f, 'r') as fn:
        contents.append(fn.readlines())

for entry in zip(contents):
    for item in entry:
        print ' '.join([line.strip() for line in item])

答案 1 :(得分:1)

我认为大熊猫更容易,但你可以在没有大熊猫的情况下做到这一点。

file_names = ['file1.txt','file2.txt','file3.txt']
res = []
for name in file_names:
    with open(name,'rb') as f:
        res.append(f.readlines())

res = [(' '.join(map(lambda row:row.strip(),line)) + '\n') for line in zip(*res)]

输出:

['1 2 3 4 5 6 7 8 9 10 11\n',
 '1 2 3 4 5 6 7 8 9\n',
 '1 2 3 4 5 6 7 8\n',
 '1 2 3 4 5 6 7\n']