在python中以csv格式读取输入文件

在python中以csv格式读取输入文件,python,python-2.7,csv,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

我想从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文件读取

csv.reader
将获取任何产生行的内容,因此您可以使用此答案中显示的任何方法从stdin获取行:

由于文件输入的灵活性,我自己偏爱它。例如:

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
命令行参数运行,以使流成为二进制,如果这对您的平台有影响:

无论哪种情况,都需要使用control-D标记输入的结束

请注意,检查dict中是否有键的正确方法是检查myDict中的[6]行,而不是检查
键。事实上,如果您只想在不存在键时使用默认值,请使用
get

for row in csvreader:
    myDict[row[6]] = myDict.get(row[6], 0) + 1
或者查看
集合。计数器
,因为您使用的是2.7:

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

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

导入系统 导入csv data=sys.stdin.readlines() csvreader=csv.reader(数据,分隔符=',') 对于csvreader中的行: 打印行