我正在尝试自己学习一些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
我知道这可以通过String Parsing&匹配,但我不知道,从哪里开始。任何链接或指针对任何类似的问题都非常有帮助。 TIA
答案 0 :(得分:1)
使用csv
读取文件。排序后,使用itertools.groupby()
对行进行分组。使用sum()
通过generator expression汇总分组行中的每个值。
答案 1 :(得分:1)
您可以使用已经建议的itertools.groupby
,或者使用已经是生成器的csv.reader
对象和collections.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
的非常有用的库