从文件中删除行和组合

时间:2014-01-06 19:55:00

标签: python

我有一个包含如下数据的文件:

A   1        23        36  -3   ABC
A   1        23        36  -3   ABD
A   1        23        36  -3   CLA
B   2        21        4   -6   PQR
B   2        21        4   -6   CAP
C   5        47        3   -4   FM
C   10       54        6   -5   AKN
D   15        76       3   -4   LGA
D   20        76       10  -6   MHA

我正在比较前5列的每一行,如果它们相等,我使用for循环加入最后一列,这需要花费很多时间。

输出就像:

A   1        23        36  -3   ABC,ABD,CLA
B   2        21        4   -6   PQR,CAP
C   5        47        3   -4   FM
C   10       54        6   -5   AKN
D   15        76       3   -4   LGA
D   20        76       10  -6   MHA

有没有pythonic方式来做到这一点?数据存储为文本文件,行逐行读取。

2 个答案:

答案 0 :(得分:1)

这样做:

from __future__ import print_function
from collections import defaultdict

d=defaultdict(list)

with open('/tmp/cols.txt') as f:
    for line in f:
        line_data=line.strip().split()
        d['\t'.join(line_data[0:5])].append(line_data[5])

for k in sorted(d.keys(), 
                key=lambda s: (s.split()[0], tuple(map(int, s.split()[1:])))):
    print(k, '\t',', '.join(d[k]))

打印:

A   1   23  36  -3   ABC, ABD, CLA
B   2   21  4   -6   PQR, CAP
C   5   47  3   -4   FM
C   10  54  6   -5   AKN
D   15  76  3   -4   LGA
D   20  76  10  -6   MHA

答案 1 :(得分:1)

lines = sorted(x.rsplit(' ', 1) for x in YOUR_FILE.read().split('\n'))

new_lines = [x + ','.join(i[1] for i in y) for x,y in
             itertools.groupby(lines, operator.itemgetter(0))]

print('\n'.join(new_lines))