Nadie hasta ahora ha mencionado la nueva opción ','
que se añadió en la versión 2.7 de la especificación de formato Mini-Lenguaje - ver PEP 378: Format Specifier for Thousands Separator en el What's New in Python 2.7 document. Es fácil de usar porque no tiene que perder el tiempo con locale
(pero está limitado para la internacionalización debido a eso, consulte el original PEP 378). Funciona con flotantes, enteros y decimales, y todas las demás características de formato previstas en la especificación de mini-idioma.
Ejemplo de uso:
print format(1234, ",d") # -> 1,234
print "{:,d}".format(1234) # -> 1,234
Nota: Aunque esta innovación es, sin duda muy útil, en realidad no todo lo que mucho más difícil de usar el módulo locale
, como varios otros han sugerido. La ventaja es que la salida numérica se puede hacer para seguir automáticamente las convenciones de separador de miles (y otras) adecuadas que se utilizan en varios países al generar datos como números, fechas y horas. También es muy fácil poner en práctica las configuraciones predeterminadas de su computadora sin aprender un montón de códigos de idioma y país. Todo lo que necesita hacer es:
import locale
locale.setlocale(locale.LC_ALL, '') # empty string for platform's default settings
Después de hacer eso sólo puede utilizar el código 'n'
tipo genérico para los números enteros (tanto float) y la salida.¿Dónde estoy, comas se utilizan como separador de miles, por lo que después de establecer la configuración regional como se muestra arriba, esto es lo que sucedería:
print format(1234, "n") # -> 1,234
print "{:n}".format(1234) # -> 1,234
Gran parte del resto del mundo utiliza los períodos en lugar de comas para este fin, por lo que establecer la configuración regional predeterminada en muchos lugares (o especificar explícitamente el código para una región tal en una llamada setlocale()
) produce los siguientes:
print format(1234, "n") # -> 1.234
print "{:n}".format(1234) # -> 1.234
de salida basándose en el tipo especificador 'd'
o ',d'
formato no se ve afectado por el uso (o no uso) de setlocale()
. Sin embargo, el 'd'
especificador es afectado si en su lugar utiliza las funciones locale.format()
o locale.format_string()
.
-1 Desafortunadamente esto está ** roto **; perpetúa la legacyness del módulo local - ** no funciona correctamente con Unicode **. Pruebe 'format (1234, u" n ")' en una configuración regional (por ejemplo, francés, ruso) donde el separador de miles es un ESPACIO SIN INTERRUPCIÓN. Usted obtiene la excepción favorita de los novatos: 'UnicodeDecodeError: códec 'ascii' no puede decodificar byte 0xa0 ...' –
@John Machin: Para el registro, la mayoría de los upvotes se hicieron a esta respuesta antes de agregar la Nota sobre el uso 'locale' - y para la iluminación de todos, ¿qué * es * el motivo correcto actual para la operación en una configuración regional específica que manejará Unicode? Gracias. – martineau
(1) ¿Cuándo se hicieron las votaciones ascendentes es de qué relevancia? (2) No hay iluminación soportada por Python-2.X, solo un formato kludge: '(1234," n "). Decodificación (locale.getpreferredencoding())' :-( –