2014-12-01 3 views
2

STDIN에서 csv 파일을 읽고 그것에 대해 작업하고 싶습니다.입력 파일을 파이썬에서 csv로 읽음

다음은 csv 파일을 읽고 필요한 작업을 수행하는 코드입니다. 이것은 잘 작동합니다. 하지만 STDIN의 의견을 듣고 싶습니다.

import csv 
with open('hospital_data.csv', 'rb') as csvfile: 
    myDict = {} 

    csvreader = csv.reader(csvfile, delimiter=',') 
    for row in csvreader: 
     if row[6] not in myDict.keys(): 
      #print 'Zipcode: ' + row[6] + ' Hospital code: ' + row[1] 
      myDict[row[6]] = 1 
     elif row[6] in myDict.keys(): 
      #print 'value in row '+ str(myDict[row[6]]) 
      myDict[row[6]] += 1 

파이썬에서 STDIN 파일을 csv 파일로 읽는 방법이 있습니까?

답변

9

csv.reader 라인을 산출 아무것도 걸릴 것입니다, 그래서 당신은 표준 입력에서 라인을 얻기 위해이 대답에 표시된 방법 중 하나를 사용할 수 있습니다 : How do you read from stdin in Python?

내가 나 자신을 fileinput에 부분 해요 인해 유연성. EG :

import csv 
import fileinput 

myDict = {} 
csvreader = csv.reader(fileinput.input(mode='rb'), delimiter=',') 

그러나이 너무 작동합니다

import csv 
import sys 

myDict = {} 
csvreader = csv.reader(sys.stdin, delimiter=',') 

그에 차이를 만드는 경우, 당신은 스트림 바이너리를 만들기 위해 -u 명령 행 인수와 함께 실행하는 것이 좋습니다 않는 경우 플랫폼 : https://docs.python.org/2/using/cmdline.html#cmdoption-u

어느 경우이든 입력의 끝을 표시하려면 control-D를 사용해야합니다.

키가 dict에 있는지 확인하는 올바른 방법은 keys을 확인하는 대신 if row[6] in myDict입니다.

for row in csvreader: 
    myDict[row[6]] = myDict.get(row[6], 0) + 1 

을 아니면 2.7에있어 이후, collections.Counter 조사 : : 그리고 키가 존재하지 않을 때 당신은 그냥 기본값을하려면 사실, get을 사용

myDict = collections.Counter(row[6] for row in csvreader) 
2

사용 sys.stdin , 그것은 파일과 같은 객체입니다.

import sys 
import csv 

data = sys.stdin.readlines() 
csvreader = csv.reader(data, delimiter=',') 
for row in csvreader: 
    print row 
관련 문제