我想知道是否有人可以帮助我合并两个文件。
第一个文件看起来像
AAAA
BBBB
中国交建
DDDD
电子电气设备
第二个就像
啊啊啊
bbbb
cccc
dddd
eee
我正在寻找最终结果为
啊啊啊啊
BBBBbbbb
中交cccc
DDDDdddd
EEEEeeee
到目前为止,我只能将第一个文件复制到另一个文件,但它总是最终会删除文件中最初包含的内容。
这是一个使用的示例
for line in f
和生成器以有效地读取文件str.strip()
摆脱空白zip
用于合并两个行列表的内置函数str.join()
用换行符加入输出行的最终列表。结合.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)
此代码不假定重要的每一行都位于偶数行号,而是检查该行是否包含除空格以外的任何其他内容 - 如果是,则它正在处理,否则不是。
这是 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)