Python以逗号分隔的文本文件并排合并

时间:2015-01-16 21:15:17

标签: python text merge

假设我有两个文本文件,其内容如下所示。

文字档案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做到这一点?

假设:

  1. 每个文本文件的行数都完全相同。
  2. 每个文本文件都是逗号分隔的文件,每行只有1个逗号。
  3. 对于每个文本文件中的每一行,逗号左侧的值都完全相同。

3 个答案:

答案 0 :(得分:2)

尝试csvkit,它还有一个可能更容易使用的命令行实用程序:

首先安装:

pip install csvkit

然后:

csvjoin --outer file1.csv file2.csv

答案 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)))