假设我有两个文本文件,其内容如下所示。
文字档案1:
Apple, 0
Pear, 1
Orange, 0
文字文件2:
Apple, 1
Pear, 1
Orange, 1
我希望以并排的方式合并它们,只保留文本文件1的两个文本文件的左“列”。也就是说,我希望生成以下合并的文本文件
合并文字文件:
Apple, 0, 1
Pear, 1, 1
Orange, 0, 1
我正试图找到如何在相当少量的代码中执行这样的合并。但是,在真正的问题中,可以有任意数量的文本文件。我怎么能用Python做到这一点?
假设:
答案 0 :(得分:2)
答案 1 :(得分:1)
我zip
然后同时走过它们。做一些拆分和格式化,然后逐行写出新文件
with open('text1.csv') as f1, open('text2.csv') as f2, open('merge.csv', 'w') as fOut:
for line1, line2 in zip(f1, f2):
name, val1 = line1.strip().split(',')
val2 = line2.strip().split(',')[1]
fOut.write('{}, {}, {}\n'.format(name, val1, val2))
答案 2 :(得分:1)
fileinput.input将列出文件,使用ordereddict连接所有值并维护顺序:
from collections import OrderedDict
d= OrderedDict()
import fileinput
with open("joined.txt","w") as f:
for line in fileinput.input(["file1.txt","file2.txt","file3.txt","file4.txt"]):
spl = line.strip().split(",")
d.setdefault(spl[0],[])
d[spl[0]] += spl[1:]
for k,v in d.items():
f.write("{} {}\n".format(k,",".join(v)))
如果它们都在自己的目录中,您可以将os.listdir传递给fileinput:
from collections import OrderedDict
d= OrderedDict()
import fileinput
import os
with open("joined.txt","w") as f:
for line in fileinput.input(os.listdir("path_to")):
spl = line.strip().split(",")
d.setdefault(spl[0],[])
d[spl[0]] += spl[1:]
for k,v in d.items():
f.write("{} {}\n".format(k,",".join(v)))
如果它们不是唯一的文件,但遵循模式,则可以使用glob:
import fileinput
import os
import glob
with open("joined.txt","w") as f:
for line in fileinput.input(glob.glob("./file*.txt")):
spl = line.strip().split(",")
d.setdefault(spl[0],[])
d[spl[0]] += spl[1:]
for k,v in d.items():
f.write("{} {}\n".format(k,",".join(v)))