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

これは文字列の解析と照合を使用して実行できることはわかっていますが、どこから始めればよいかわかりません。リンクやポインタは、同様の問題に非常に役立ちます。ティア

4

2 に答える 2

1

ファイルの読み取りに使用csvします。itertools.groupby()ソート後に行をグループ化するために使用します。ジェネレータ式sum()を介して、グループ化された行の各値を合計するために使用します。

于 2012-10-04T16:22:22.063 に答える
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

于 2012-10-04T16:44:41.547 に答える