python将两个文本文件合并到一个文件中

时间:2014-08-09 22:59:18

标签: python

我想创建一个简单的代码来组合两个文本文件,例如file1.txt包含:

car
house

和file2.txt包含:

voiture
maison

我希望将两个文件的行组合在一起,然后用':'将它们分开来看起来像这样:

car:voiture 
house:maison 

我尝试这样做,我确定我错了,无论如何我会发布我的代码:):

with open("user.txt") as u: 
 with open("site.txt") as s:
     for line in s.read().split('\n'):
      s1=line
      for line in u.read().split('\n'):
       s2=line
       with open('result.txt', 'a') as file:
        file.write(s1+':'+s2)

非常感谢任何帮助人员:)

5 个答案:

答案 0 :(得分:5)

这是itertools.izip的用例:

from itertools import izip

with open('file1.txt') as f1, open('file2.txt') as f2, open('new.txt', 'w') as fout:
    for fst, snd in izip(f1, f2):
        fout.write('{0}:{1}\n'.format(fst.rstrip(), snd.rstrip()))

这将第一个文件中的第一行与第二个文件中的第一行(然后是第一个文件中的第二行和第二个文件中的第二行等)组合在一起,从行中删除换行符,添加中间的:并添加\n,因此它实际上是一条线。这样可以节省将两个文件完全加载到内存中,并在每个文件上迭代执行。但请注意,如果文件长度不相等,则结果将停在最短文件中的行数。

答案 1 :(得分:2)

您的代码将无法正常工作,因为您尝试读取第一个文件中的每一行的第二个文件,还有一些其他错误(例如不写新行等)。尝试改为

with open("user.txt") as u, \
     open("site.txt") as s, \
     open("result.txt", "a") as file: # Only open every file once for all output 
     for s1 in u: # You don't nead to use .read().split('\n')
         s2 = s.readline() # Read ONE line INCLUDING the newline char
         file.write(s1 + ":" + s2) # Write output with the newline from `s2`

或者,您可以阅读所有行并使用zip

with open("user.txt") as u, \
     open("site.txt") as s, \
     open("result.txt", "a") as file:
     user_lines = u.readlines()
     size_lines = s.readlines()
     for s1, s2 in zip(user_lines, size_lines):
         file.write(s1 + ":" + s2 + "\n") # Write output with newline char

答案 2 :(得分:1)

你很亲密,但是有问题。您需要将它们一起迭代,而不是一个接一个地迭代或一个接一个地迭代。幸运的是,使用zip

很容易
with open('user.txt', 'r') as user_file, \
     open('site.txt', 'r') as site_file, \
     open('result.txt', 'a') as result_file:
    user_lines = user_file.read().split('\n')
    site_lines = site_file.read().split('\n')
    for user_line, site_line in zip(user_lines, site_lines):
        result_file.write(user_line + ':' + site_line + '\n')

答案 3 :(得分:1)

如果你这样做,你将在文件到达第二行之前阅读所有文件。

您希望使用 file.readline()一次一行地迭代每个文件,直到您完成一个或两个文件(并且可能有一些事情要处理最后一条不均匀的行,如果文件大小不相同。)

答案 4 :(得分:1)

我的解决方案:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

with open('result.txt', 'a') as r:
    with open("user.txt") as u: 
        with open("site.txt") as s:
            for line in u:
                r.write(
                    "{0}: {1}".format(
                        line[:-1] if line.endswith('\n') else line,
                        s.readline()
                    )
                )

希望这有帮助!