lenguaje - python tutorial
¿Cómo uso Python para convertir una cadena en un número si tiene comas como separadores de miles? (8)
Esto funciona:
(Una manera sucia pero rápida)
>>> a=''-1,234,567,89.0123''
>>> "".join(a.split(","))
''-123456789.0123''
Tengo una cadena que representa un número que usa comas para separar miles. ¿Cómo puedo convertir esto a un número en Python?
>>> int("1,000,000")
Genera un ValueError
.
Podría reemplazar las comas con cadenas vacías antes de tratar de convertirlas, pero eso parece estar mal de alguna manera. ¿Hay una mejor manera?
Hay varias formas de analizar números con miles de separadores. Y dudo que la forma descrita por ~ ubuntu sea la mejor en todos los casos. Es por eso que enumero otras formas también.
El lugar adecuado para llamar a
setlocale()
está en el módulo__main__
. Es una configuración global y afectará a todo el programa e incluso a las extensiones C (aunque tenga en cuenta que la configuración LC_NUMERIC no está establecida a nivel del sistema, sino que es emulada por Python). Lea las advertencias en la documentación y piense dos veces antes de ir por este camino. Probablemente esté bien en una sola aplicación, pero nunca la use en bibliotecas para una gran audiencia. Probablemente deberías evitar solicitar la configuración regional con alguna codificación de juego de caracteres en particular, ya que podría no estar disponible en algunos sistemas.Utilice una de las bibliotecas de terceros para la internacionalización. Por ejemplo, PyICU permite usar cualquier configuración regional disponible sin afectar todo el proceso (e incluso analizar números con separadores de miles particulares sin utilizar las configuraciones regionales):
NumberFormat.createInstance (Locale (''en_US'')). Parse ("1,000,000"). GetLong ()
Escriba su propia función de análisis sintáctico, si no tiene qué instalar bibliotecas de terceros para hacerlo "correctamente". Puede ser tan simple como
int(data.replace('','', ''''))
cuando no se necesita una validación estricta.
Intenté esto. Va un poco más allá de la pregunta: obtienes una entrada. Primero se convertirá en cadena (si es una lista, por ejemplo, de Beautiful soup); luego a int, luego a flotar.
Va tan lejos como puede llegar. En el peor de los casos, devuelve todo lo no convertido como cadena.
def to_normal(soupCell):
'''''' converts a html cell from beautiful soup to text, then to int, then to float: as far as it gets.
US thousands separators are taken into account.
needs import locale''''''
locale.setlocale( locale.LC_ALL, ''english_USA'' )
output = unicode(soupCell.findAll(text=True)[0].string)
try:
return locale.atoi(output)
except ValueError:
try: return locale.atof(output)
except ValueError:
return output
Recibí un error de configuración regional de la respuesta aceptada, pero el siguiente cambio funciona aquí en Finlandia (Windows XP):
import locale
locale.setlocale( locale.LC_ALL, ''english_USA'' )
print locale.atoi(''1,000,000'')
# 1000000
print locale.atof(''1,000,000.53'')
# 1000000.53
Reemplace las comas con cadenas vacías y convierta la cadena resultante en un int
o un float
.
>>> a = ''1,000,000''
>>> int(a.replace('','' , ''''))
1000000
>>> float(a.replace('','' , ''''))
1000000.0
#python3 tenzin
def changenum(data):
foo = ""
for i in list(data):
if i == ",":
continue
else:
foo += i
return float(int(foo))
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
''en_US.UTF-8''
>>> print locale.atoi(''1,000,000'')
1000000
>>> print locale.atof(''1,000,000.53'')
1000000.53
esto se hace en Linux en los Estados Unidos. -Suresh
import locale
locale.setlocale( locale.LC_ALL, ''en_US.UTF-8'' )
locale.atoi(''1,000,000'')
# 1000000
locale.atof(''1,000,000.53'')
# 1000000.53