0

目的は、python スクリプト プロセスstdinを行ごとに並べ替え、同じキーを持つ「データ ブロック」を収集し、キーが変更されたらそのブロックを JSON (または他の単一オブジェクト) として出力することです。groupbyこの段階では、 and をitertools正しく使用して、キーとデータのブロックを分離できるようにしたいだけです。以下の例では、それぞれ 3 行の 2 つのブロックがあります。セットアップは

 cat data.csv | python qwe.py

どこdata.csvですか

 1,this,is
 1,a,test
 1,hope,it
 2,works,well
 2,and,I
 2,move,forward

そしてqwe.py_

 import itertools
 import operator
 import sys
 import re

 def main(argv):
  for key, bloc in itertools.groupby( sys.stdin.readline().split(',') ,
                                 key=operator.itemgetter(0)):
      print '-----' + key
      print list(bloc)

 if __name__ == "__main__":
  main(sys.argv)

ヒントをありがとう。

4

1 に答える 1

1

sys.stdin.readline()最初の行のみを生成し1,this,is\nます。すべての行を繰り返す必要があります。

各行を手動で分割する代わりに、csvモジュールを使用します。

import csv
import itertools
import operator
import sys

def main():
    reader = csv.reader(sys.stdin)
    for key, bloc in itertools.groupby(reader, key=operator.itemgetter(0)):
        print '-----' + key
        print list(bloc)

if __name__ == '__main__':    
    main()
于 2013-06-28T03:09:55.540 に答える