1

我正在尝试自己学习一些python编码,但我遇到了这个问题::

输入文本文件内容::

10280341|2012-10-03 19:11:06.390|Sami|abc|Crossword|70
10280343|2012-10-03 19:15:32.173|Sami|aaa|Sudoku|30
10280355|2012-10-04 19:18:32.173|miami|bbb|Chaircar|15
10280366|2012-10-04 19:19:32.173|miami|bob|Avista|35

预期输出::

2012-10-03 Sami|2|100
2012-10-04 miami|2|50

我知道这可以通过字符串解析和匹配来完成,但我不知道从哪里开始。任何链接或指针对任何类似问题都非常有帮助。TIA

4

2 回答 2

1

用于csv读取文件。用于itertools.groupby()在排序后对行进行分组。用于sum()通过生成器表达式对分组行中的每个值求和。

于 2012-10-04T16:22:22.063 回答
1

您可以itertools.groupby按照已经建议的方式使用,或者使用csv.reader已经是生成器的对象和 acollections.defaultdict来聚合值列...

import csv
from collections import defaultdict

summary = defaultdict(list)
csvin = csv.reader(open('testdata.txt'), delimiter='|')
for row in csvin:
    summary[(row[1].split(' ')[0], row[2])].append(int(row[5]))

csvout = csv.writer(open('testdata.out','wb'), delimiter='|')
for who, what in summary.iteritems():
    csvout.writerow( [' '.join(who), len(what), sum(what)] )

如果您正在查看更复杂的交叉制表/透视等...,那么可能值得一看pandas,这是一个非常有用的库,基于numpy

于 2012-10-04T16:44:41.547 回答