使用python和groupby处理stdin数据集合

时间:2013-06-28 03:03:45

标签: python group-by itertools

目标是让python脚本进程逐行排序stdin,收集具有相同密钥的“数据块”,然后在密钥更改后将该块作为JSON(或任何其他单个对象)输出。在这个阶段,我只想要能够隔离密钥和密钥。正确使用groupbyitertools的数据集团。在下面的示例中,有两个集团,每个集团有三行。设置

 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)

感谢任何提示。

1 个答案:

答案 0 :(得分: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()