string to float conversiopn

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
Moke
User
Beiträge: 2
Registriert: Montag 22. Mai 2006, 15:53

Hallo,

ich schlage mich mit einem hartnäckigen kleinen Problem herum. :twisted:

Ich lese strings aus einer Binärdatei über unpack aus, scheitere
jedoch an einer nachfolgenden Umwandlung der Strings in Floats

nachfolgend zwei Auszüge und die Fehlermeldung:

value = unpack('96s',f.read(96))[0]
value.strip()
value.upper()

# soweit so gut ....
# jetzt kommt das Problem:

print "\n>>>%f<<<" % string.atof(value)

Als Fehlermeldung erscheint:

print "\n>>>%f<<<" % string.atof(value)
File "C:\Python23\lib\string.py", line 205, in atof
return _float(s)
ValueError: null byte in argument for float()

Ich benutzte Python 2.3 auf WinXP.

Ich habe so ziemlich alles ausprobiert, was mir in den Sinn gekommen ist.

Für Hilfe bin ich sehr dankbar.

Moke
Moke
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie wäre es mit:

Code: Alles auswählen

print "\n>>>%f<<<" % float(value)
Oder, wenn es doch ein String ist, einfach nur:

Code: Alles auswählen

print "\n>>>%s<<<" % value
P.S.: http://www.python-forum.de/faq.php#21 !

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Moke
User
Beiträge: 2
Registriert: Montag 22. Mai 2006, 15:53

Jens,

vielen Dank für den Hinweis bezüglich des Codes. Ich gelobe Besserung.
Ich habe auch

Code: Alles auswählen

float(value)
benutzt, jedoch mit dem selben Ergebnis. Ich vermute, die Fehlermeldung
könnte etwas mit Nullbytes zu tun haben. Der

Code: Alles auswählen

print

statement ist nur zum Debuggen benutzt worden. Ich benötige
wirklich Fließkommazahlen.

Moke
Moke
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dann hast du wohl mit unpack keine Zahl "gemacht"...

Versuch doch mal folgendes:

Code: Alles auswählen

value = unpack('96s',f.read(96))[0]
print ">>>%s<<<" % value.encode("String_Escape")

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten