2013-06-28 2 views
0

목적은 파이썬 스크립트 프로세스를 stdin 행별로 정렬하고 동일한 키를 갖는 '데이터 블록'을 수집 한 다음 해당 블록을 JSON (또는 다른 단일 객체)으로 출력하는 것입니다. 키가 변경되면 이 단계에서는 groupbyitertools을 올바르게 사용하여 키 & 데이터 블록을 분리 할 수 ​​있기를 바랍니다. 아래의 예에서는 각각 세 행으로 구성된 두 개의 블록이 있습니다. data.csvstdin 데이터 블록을 파이썬 및 groupby로 처리

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) 

덕분이다 곳에 설치가

cat data.csv | python qwe.py 

입니다.

답변

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