Ich habe eine Zeichenfolge, die eine Zahl darstellt, bei der Tausende durch Kommas getrennt werden. Wie kann ich dies in eine Zahl in Python konvertieren?
>>> int("1,000,000")
Erzeugt a ValueError
.
Ich könnte die Kommas durch leere Zeichenfolgen ersetzen, bevor ich versuche, sie zu konvertieren, aber das fühlt sich irgendwie falsch an. Gibt es einen besseren Weg?
'C'
würde dies immer noch einValueError
! Geben .).Traceback (most recent call last): File "F:\test\locale_num.py", line 2, in <module> locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) File "F:\Python27\lib\locale.py", line 539, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting
Es gibt verschiedene Möglichkeiten, Zahlen mit Tausenden von Trennzeichen zu analysieren. Und ich bezweifle, dass der von @unutbu beschriebene Weg in allen Fällen der beste ist. Deshalb liste ich auch andere Wege auf.
Der richtige Ort zum Anrufen
setlocale()
ist im__main__
Modul. Die globale Einstellung wirkt sich auf das gesamte Programm und sogar auf C-Erweiterungen aus (beachten Sie jedoch, dass die Einstellung LC_NUMERIC nicht auf Systemebene festgelegt, sondern von Python emuliert wird). Lesen Sie die Vorbehalte in der Dokumentation und überlegen Sie zweimal, bevor Sie diesen Weg gehen. Es ist wahrscheinlich in einer einzelnen Anwendung in Ordnung, aber verwenden Sie es niemals in Bibliotheken für ein breites Publikum. Wahrscheinlich sollten Sie vermeiden, ein Gebietsschema mit einer bestimmten Zeichensatzcodierung anzufordern, da es auf einigen Systemen möglicherweise nicht verfügbar ist.Verwenden Sie eine Bibliothek von Drittanbietern für die Internationalisierung. Mit PyICU können Sie beispielsweise jedes verfügbare Gebietsschema verwenden, ohne den gesamten Prozess zu beeinflussen (und sogar Zahlen mit bestimmten Tausendertrennzeichen ohne Verwendung von Gebietsschemas analysieren):
NumberFormat.createInstance (Gebietsschema ('en_US')). Parse ("1,000,000"). GetLong ()
Schreiben Sie Ihre eigene Analysefunktion, wenn Sie nicht wissen, wie Sie Bibliotheken von Drittanbietern installieren sollen, um dies "richtig" zu tun. Dies kann so einfach sein, als
int(data.replace(',', ''))
ob keine strikte Validierung erforderlich wäre.quelle
setlocate
sollte seinsetlocale
). Auch +1.Ersetzen Sie die Kommas durch leere Zeichenfolgen und verwandeln Sie die resultierende Zeichenfolge in eine
int
oder einefloat
.quelle
Das funktioniert:
(Ein schmutziger, aber schneller Weg)
quelle
Ich habe einen Gebietsschemafehler von der akzeptierten Antwort erhalten, aber die folgende Änderung funktioniert hier in Finnland (Windows XP):
quelle
Ich habe es versucht. Es geht etwas über die Frage hinaus: Sie erhalten eine Eingabe. Es wird zuerst in einen String konvertiert (wenn es sich um eine Liste handelt, z. B. aus Beautiful Suppe). dann zu int, dann zu schweben.
Es geht so weit es geht. Im schlimmsten Fall wird alles, was nicht konvertiert wurde, als Zeichenfolge zurückgegeben.
quelle
Dies geschieht unter Linux in den USA.
quelle
quelle