我想知道是否有人能帮我合并两个文件。
第一个文件看起来像
AAAA
BBBB
CCCC
DDDD
EEEE
第二个就像
AAAA
BBBB
CCCC
DDDD
EEEE
我正在寻找最终成为
的东西AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
EEEEeeee
到目前为止,我只能将第一个文件复制到另一个文件,但它总是最终删除文件中最初包含的内容。
答案 0 :(得分:2)
以下是使用
的示例for line in f
和generators以便有效阅读文件str.strip()
摆脱空白zip
内置来合并两个行列表str.join()
使用换行符加入输出行的最终列表。<强> 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)