Umwandlung von Fließkommazahlen

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
Timbo
User
Beiträge: 5
Registriert: Dienstag 6. Juli 2010, 17:43

Hallo,

ich habe mir ein Skript geschrieben, welches eine CSV-Datei auswertet. Die enthaltenen Werte möchte ich nun weiterverarbeiten.
Probleme habe ich momentan dabei mit der Umwandlung von Zahlen mittels float(). Die in der CSV-Datei enthaltenen Zahlen sind mit "." als Tausendertrennzeichen sowie "," als Nachkommatrenner versehen (also z.b. "1.200.000,50"), weshalb float() einen ValueError wirft.
Bevor ich mir jetzt eine Helper-Funktion schreibe, die dann die Werte richtig umwandelt, wollte ich nachfragen, ob vielleicht bereits eine Library existiert, die mir dies abnehmen kann?

Gruß
Tim
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Es gibt zumindest innerhalb einer externen Bibliothek etwas für den Zweck: http://babel.edgewall.org/wiki/Document ... ng-numbers

Vermutlich willst du dir aber lieber den Code abschauen, statt direkt das komplette Paket zu installieren. ;)
Timbo
User
Beiträge: 5
Registriert: Dienstag 6. Juli 2010, 17:43

snafu hat geschrieben:Es gibt zumindest innerhalb einer externen Bibliothek etwas für den Zweck: http://babel.edgewall.org/wiki/Document ... ng-numbers

Vermutlich willst du dir aber lieber den Code abschauen, statt direkt das komplette Paket zu installieren. ;)
Danke, genau das habe ich gesucht!
Schön ist auch die Möglichkeit Datumswerte zu konvertieren. Das werde ich später noch gebrauchen können.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mal so ganz naiv nachgefragt: Das Eingangsformat kannst Du nicht beeinflussen? Wenn ja, wäre das ja der einfachere Weg ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Timbo
User
Beiträge: 5
Registriert: Dienstag 6. Juli 2010, 17:43

Hyperion hat geschrieben:Mal so ganz naiv nachgefragt: Das Eingangsformat kannst Du nicht beeinflussen? Wenn ja, wäre das ja der einfachere Weg ;-)
Klar, doch leider habe ich keinen Einfluss darauf. Ich bekomme die CSV-Datei so geliefert.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Wenn das Format fix ist, würde es doch auch ganz einfach so gehen:

Code: Alles auswählen

In [1]: val = "1.200.000,50"

In [2]: float(val.replace(".", "").replace(",", "."))
Out[2]: 1200000.5
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten