在python中将inputfile读为csv

时间:2014-12-01 22:05:12

标签: python python-2.7 csv

我想从STDIN读取一个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

Python中有没有办法从STDIN读取文件作为csv文件?

2 个答案:

答案 0 :(得分:11)

csv.reader将获取产生线条的任何内容,因此您可以使用此答案中显示的任何方法从stdin获取行: 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中的正确方法是if row[6] in myDict,而不是检查keys。事实上,如果您只想在密钥不存在时使用默认值,请使用get

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

或者查看collections.Counter,因为你在2.7:

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

答案 1 :(得分:2)

使用sys.stdin,它是类似文件的对象。

import sys
import csv

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