Python进行数据匹配和合并

时间:2013-08-10 18:04:21

标签: python excel-vba vba excel

输入文件是带有

的制表符分隔的unicode txt
a  A   e  f  m
b  B   g  h
c  C   i  j
b  B   k  l

我希望通过第一列和第二列匹配并合并。所以我想得到

a  A   e  f  m
b  B   g  h     k  l
c  C   i  j

代码必须检测输入中的最大列数。由于在这个例子中它是5,所以从第6列放入“k l”。

实际上,当他们都是数字时,我几乎设法使用Matlab来做到这一点。但是哦,当它们是字母时,Matlab在处理unicode方面非常糟糕,虽然我读了关于如何在Matlab中处理unicode的stackoverflow我放弃了。所以我现在转向python。

使用excel VBA,它似乎可行,但由于数据量太大所以我猜测python会比Excel VBA更快(我猜对了吗?)

1 个答案:

答案 0 :(得分:0)

我个人将输入/处理逻辑与输出/格式化逻辑分开。

def match_merge(filename):
    with open(filename) as f:
        c = csv.reader(f,delimiter='\t')
        d = defaultdict(list)
        for line in c:
            d[(line[0],line[1])].append(line[2:])
    return d

演示:

In [17]: import pprint

In [18]: pprint.pprint(match_merge('tabdelim'))
{('a', 'A'): [['e', 'f', 'm']],
 ('b', 'B'): [['g', 'h'], ['k', 'l']],
 ('c', 'C'): [['i', 'j']]}

您可以dictdefaultdict实际上)match_merge返回并将其写入制表符分隔文件中。由于我并不真正了解您的输出需求,因此我省略了该部分。