-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])

行の日付をキーとして辞書にすべての行を保存します。値は名前をキーとする別の辞書であり、値は2つの要素を持つリストです。1つ目はこの名前の数の累積合計です。この日付からこの行まで、2番目はこの日付/名前のコンステレーションの被加数の数です。次に、辞書を要求された形式で印刷し、2つの日付を比較すると、その形式の文字列として日付を比較した場合と同じ結果が得られるという状況を使用するため、日付文字列に対して関数をYYY-MM-DD使用できます。sorted私も名前で並べ替えます。

例(ファイルを使用できないようになっている)については、http://ideone.com/rx3h2を参照してください。それはあなたが要求したのと同じ出力を与えます。

于 2012-10-05T21:18:04.120 に答える