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.
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

invalid literal for float():

Beitragvon monocult » Freitag 20. Juli 2007, 12:24

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: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 20. Juli 2007, 12:29

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:

Beitragvon monocult » Freitag 20. Juli 2007, 12:36

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

Beitragvon lunar » Freitag 20. Juli 2007, 12:43

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:

Beitragvon Rebecca » Freitag 20. Juli 2007, 12:45

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:

Beitragvon monocult » Freitag 20. Juli 2007, 12:56

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

Danke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder