use*_*477 3 python csv python-2.7
我想从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
Run Code Online (Sandbox Code Playgroud)
有没有办法在Python中将文件从STDIN读取为csv文件?
Pet*_*per 11
csv.reader将采取任何产生线条的方法,因此您可以使用此答案中显示的任何方法从stdin获取行:
如何从Python中读取stdin?
fileinput由于其灵活性,我对自己很偏爱.例如:
import csv
import fileinput
myDict = {}
csvreader = csv.reader(fileinput.input(mode='rb'), delimiter=',')
Run Code Online (Sandbox Code Playgroud)
但这也有效:
import csv
import sys
myDict = {}
csvreader = csv.reader(sys.stdin, delimiter=',')
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你将需要运行-u命令行参数来生成流二进制文件,如果这对您的平台产生影响:https:
//docs.python.org/2/using/cmdline.html#cmdoption- ü
在任何一种情况下,您都需要使用control-D来标记输入的结尾.
请注意,检查密钥是否在dict中的正确方法if row[6] in myDict不是检查keys.事实上,如果您只想在密钥不存在时使用默认值,请使用get:
for row in csvreader:
myDict[row[6]] = myDict.get(row[6], 0) + 1
Run Code Online (Sandbox Code Playgroud)
或者研究一下collections.Counter,因为你在2.7:
myDict = collections.Counter(row[6] for row in csvreader)
Run Code Online (Sandbox Code Playgroud)