用python和groupby处理stdin数据块

用python和groupby处理stdin数据块,python,group-by,itertools,Python,Group By,Itertools,目标是让python脚本进程逐行排序stdin,收集具有相同键的“数据块”,然后在键更改后将该块作为JSON(或任何其他单个对象)输出。在这个阶段,我只想通过正确使用groupby和itertools来隔离关键和数据块。在下面的示例中,有两个块,每个块有三行。设置是 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

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

 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
 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)
并且
qwe.py

 1,this,is
 1,a,test
 1,hope,it
 2,works,well
 2,and,I
 2,move,forward
 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)
谢谢您的提示。

sys.stdin.readline()
只生成第一行
1,这是\n
。您应该迭代所有行

使用模块代替手动拆分各行


就这样,谢谢。我花了很多时间…我知道这个模块,但我没有想到将它应用到sys.stdin。