-4

2012-05-10 BRAD 10
2012-05-08 BRAD 40
2012-05-08 BRAD 60
2012-05-12 TOM 100
我想要输出为
2012-05-08 BRAD|2|100
2012-05-10 BRAD| 1|10
2012-05-12 汤姆|1|100

我从这段代码开始::

import os,sys
fo=open("meawoo.txt","w")
f=open("test.txt","r")
fn=f.readlines()
f.close()
for line in fn:
    line = line.strip()
    sline = line.split("|")
    p = sline[1].split(" ")[0],sline[2],sline[4]
    print p
    fo.writelines(str(p)+"\n")
fo.close()
o_read = open("meawoo.txt","r")
x_read=o_read.readlines()
from operator import itemgetter
x_read.sort(key=itemgetter(0))
from itertools import groupby
z = groupby(x_read, itemgetter(0))
print z
for elt, items in groupby(x_read, itemgetter(0)):
    print elt, items
    for i in items:
        print i

It will be very helpful if u suggest me some usefull changes to my work.TIA
4

1 回答 1

3

以下代码应该以您想要的格式打印数据(据我了解):

d = {}
with open("testdata.txt") as f:
    for line in f:
        parts = line.split()
        if parts[0] in d:
            if parts[1] in d[parts[0]]:
                d[parts[0]][parts[1]][0] += int(parts[2])
            else:
                d[parts[0]][parts[1]] = [int(parts[2]), 0]
            d[parts[0]][parts[1]][1] +=1
        else:
            d[parts[0]] = {parts[1]: [int(parts[2]), 1]}
    for date in sorted(d):
        for name in sorted(d[date]):
            print "%s %s|%d|%d" % (date, name, d[date][name][0], d[date][name][1])

我将每一行保存在字典中,以行的日期作为键,值是另一个以名称为键的字典,值是一个包含两个元素的列表:第一个是这个名字的数字的累积总和此日期到此行,第二个是此日期/名称星座的总和数。然后我以您要求的格式打印字典,并使用两个日期的比较给出的结果与将日期比较为具有格式的字符串的结果相同的情况YYY-MM-DD,所以我可以sorted在日期字符串上使用该函数。我也按名字排序。

有关示例(适用于无法使用文件),请参见http://ideone.com/rx3h2。它提供了您要求的相同输出。

于 2012-10-05T21:18:04.120 回答