在python中组合文件

时间:2013-11-02 17:58:41

标签: python file

我想知道是否有人能帮我合并两个文件。

第一个文件看起来像

  

AAAA

     

BBBB

     

CCCC

     

DDDD

     

EEEE

第二个就像

  

AAAA

     

BBBB

     

CCCC

     

DDDD

     

EEEE

我正在寻找最终成为

的东西
  

AAAAAAAA

     

BBBBBBBB

     

CCCCCCCC

     

DDDDDDDD

     

EEEEeeee

到目前为止,我只能将第一个文件复制到另一个文件,但它总是最终删除文件中最初包含的内容。

2 个答案:

答案 0 :(得分:2)

以下是使用

的示例

<强> combine.py

def read_lines(f):
    for line in f:
        if line.strip():
            yield line.strip()


def combine(lines):
    for (first, second) in lines:
        yield "%s%s\n" % (first, second)

lines1 = read_lines(open('first.txt'))
lines2 = read_lines(open('second.txt'))

lines = zip(lines1, lines2)

merged = '\n'.join(combine(lines))

with open('merged.txt', 'w') as outfile:
    outfile.write(merged)

此代码并不假设重要的每一行都是偶数行,而是检查该行是否包含除空格之外的其他内容 - 如果是,则它正在处理,否则不会。

答案 1 :(得分:0)

这是Lokas Graf的回答,重写了一点,以便每次输入文件只保留一行,而不是一次读取所有行。它还使用with作为文件I / O.

from itertools import izip

def read_lines(f):
    for line in f:
        s = line.strip()
        if s:
            yield s

def collect_input(fname0, fname1):
    # Multiple open() on one with only works in Python 2.7 or 3.1+.
    # For Python 2.5, 2.6, or 3.0 you can use two nested with statements
    # or use contextlib.nested().
    with open(fname0, "rt") as f0, open(fname1, "rt") as f1:
        for line0, line1 in izip(read_lines(f0), read_lines(f1)):
            yield "%s%s\n" % (line0.strip(), line1.strip())

with open('merged.txt', "wt") as f:
    for line in collect_input('first.txt', 'second.txt'):
        f.write(line)