【问题标题】:processing stdin data blocs with python and groupby使用 python 和 groupby 处理标准输入数据块
【发布时间】:2013-06-28 03:03:45
【问题描述】:

目标是让 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)

感谢任何提示。

【问题讨论】:

    标签: python group-by itertools


    【解决方案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()
    

    【讨论】:

    • 就是这样,谢谢。我花费的时间......我知道这个模块,但我没想过将它应用到 sys.stdin。
    猜你喜欢
    • 2013-06-13
    • 2015-12-27
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2014-06-03
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多