[英]Read inputfile as csv in python
我想從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獲取行: 如何從Python中讀取stdin?
由於其靈活性,我fileinput
自己fileinput
。 例如:
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)
使用sys.stdin,它是類似文件的對象。
import sys
import csv
data = sys.stdin.readlines()
csvreader = csv.reader(data, delimiter=',')
for row in csvreader:
print row
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.