0

输入文件是一个制表符分隔的 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,所以“k l”是从第 6 列开始的。

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

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

4

1 回答 1

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']]}

您可以将返回的dict(defaultdict实际上)match_merge轻松地写入 tab-delim 文件。由于我并不真正了解您的输出需求,因此我省略了该部分。

于 2013-08-10T19:33:32.180 回答