invalid literal for float():

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Hallo,

ich versuche mir wie folgt die Stock Daten von yahoo zu holen.

Code: Alles auswählen

import urllib2
import csv, string

def getsource(url):
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    htmlSource = opener.open(url)
    htmlSource = htmlSource.read()
    return string.strip(htmlSource)

symbol = "H9Y.DE"
historyurl = "http://ichart.yahoo.com/table.csv?s=%s&d=6&e=20&f=2007&g=d&a=0&b=14&c=2000&ignore=.csv" % (symbol)
rowlist = getsource(historyurl).split("\n")

reader = csv.reader(rowlist,delimiter = ',')
yesterday = 0
for Date, Open, High, Low, Close, Volume, AdjClose, in reader:
    
    print float(Close)
doch leider scheitert die Umwandlung des strings in einen float Wert. Muss ich da noch die Codierung beachten oder ähnliches?

Code: Alles auswählen

ValueError: invalid literal for float(): Close
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Schau dir doch noch mal die Fehlermeldung genauer an. Du versuchst den String "Close" in einen Float zu wandeln, das kann natürlich nicht funktionieren.
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

warum nicht der String Close ist z.b "23.65"
bzw. so gehts ja auch

Code: Alles auswählen

Close = "23.65"
print float(Close)
lunar

Code: Alles auswählen

float('foo')
wirft die Fehlermeldung

Code: Alles auswählen

type 'exceptions.ValueError'>: invalid literal for float(): foo
Ich denke, du solltest jetzt von selbst darauf kommen, dass der Name Close an den String "Close" gebunden ist. Das kannst du dir auch "live" anschauen, indem du einfach mal die float-Konvertierung weglässt, und den String roh ausgibst.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Also wenn ich dein Programm ausfuehre, ist beim ersten durchlauf Close="Close", erst danach kommen die Zahlen. Die erste Zeile ist eine Header-Zeile, danach kommen erst die Zahlen. Ein einfaches print haette dir das gezeigt...
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

das wars, hatte die erste Zeile nicht gesehen :/ dachte das der csv Import das filtert. Aber eigentlich logisch.

Danke
Antworten