2016-04-10 51 views
0
def getQuotesYahoo(): 

    tickerStr = "GOOGL+AMZN" 
    yahoo_url ="http://finance.yahoo.com/d/quotes.csv?s=%s&f=saohgb3t1" % (tickerStr) 
    retQuotes = {} 

    data = urllib2.urlopen(yahoo_url).readlines() 

    for d in data: 
     p = d.strip().split(',') 
     stkInfo = {} 
     stkInfo['lastTime'] = p[6] 
     stkInfo['last'] = p[1] 
     stkInfo['open'] = p[2] 
     stkInfo['high'] = p[3] 
     stkInfo['low'] = p[4] 
     stkInfo['bid'] = p[5] 
     tic = p[0] 
     print stkInfo 
     retQuotes[tic] = stkInfo 

    print retQuotes['GOOGL']['last'] 

Bu kod, KeyError'da başarısız oluyor ve sözlüğü dize anahtarıyla doldurmuyor. Temelde googlefiance için çalışan aynı kod var.Python KeyError ile Başarısız Oldu

KeyError: 'GOOGL'

retQuotes:

{'"AMZN"': {'last': '594.60', 'bid': 'N/A', 'high': '597.86', 'low': '589.00', 'lastTime': '"4:00pm"', 'open': '594.32'}, '"GOOGL"': {'last': '759.98', 'bid': 'N/A', 'high': '767.13', 'low': '755.77', 'lastTime': '"4:00pm"', 'open': '765.87'}}

+3

Google için hisse senedi senedi 'GOOGL' değil,' GOOG' – n1c9

+1

'RetQuotes' içinde ne var? Değişkeni yazdırmak yardımcı olabilir. –

+0

yapıda ticker gibi görünüyor. – user3763220

cevap

0

o dict anahtar mevcut anahtarında çift tırnak vardır ' 'GOOGL'' böyledir görünüyor. Stoktan tüm veriler geçerli piton değişmezleri olurdu o (N/A hariç) gibi görünse de

retQuotes['"GOOGL"']['last'] 

: (tüm dize aslında "GOOGL" dır) yani olarak bakın gerekir

import ast 
field_names = ('last','open','high','low','bid','lastTime') 
for d in data: 
    d = d.replace("N/A","None") 
    fields = ast.literal_eval("(%s)"%d) #add round brackets to indicate the data is a tuple 
    stock = fields[0] 
    stkInfo = dict(zip(field_names,fields[1:])) 
    retQuotes[stock] = stkInfo 
: Ayrıca dict yapıcısı ile zip kullanarak beyanı kısaltabilir

d = d.replace("N/A","None") 
fields = ast.literal_eval("(%s)"%d) #add round brackets to indicate the data is a tuple 

: hangi bir demet gibi verileri ayrıştırmak için ast.literal_eval kullanabileceğiniz anlamına gelir

+0

tekerleği yeniden icat ediyoruz Bunun da daha hızlı olacağını düşünüyorum. Yardım için teşekkürler – user3763220

+0

@ user3763220 Lütfen [bir cevabı kabul etme] için bir mekanizma olduğunu bilin. (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

+0

teşekkürler çocuklar. çok yararlı. – user3763220