用python和groupby处理stdin数据块
目标是让python脚本进程逐行排序用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
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。