2013-06-28 40 views
0

目標是逐行排列stdin的python腳本進程,收集具有相同密鑰的「數據塊」,然後將該塊作爲JSON(或任何其他單個對象)輸出。一旦關鍵改變。在這個階段,我只想通過正確使用groupbyitertools來分離關鍵的&數據塊。在下面的例子中,每個都有兩排三行。該設置是使用python和groupby處理stdin數據塊

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

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() 
+0

就是這樣,謝謝。我花費的時間...我知道這個模塊,但我沒有想到將它應用到sys.stdin。 – user2105469