Personne n'a jusqu'à présent mentionné la nouvelle option ','
qui a été ajouté dans la version 2.7 à la Spécification du format Mini-Langue - voir PEP 378: Format Specifier for Thousands Separator dans le What's New in Python 2.7 document. Il est facile à utiliser parce que vous n'avez pas à vous tromper avec locale
(mais est limité pour l'internationalisation en raison de cela, voir le original PEP 378). Il fonctionne avec des flottants, des entiers et des décimales - et toutes les autres fonctions de formatage prévues dans la spécification de mini-langage.
Exemple d'utilisation:
print format(1234, ",d") # -> 1,234
print "{:,d}".format(1234) # -> 1,234
Note: Bien que cette nouvelle fonctionnalité est certainement à portée de main, il est en fait pas tout ce qui est beaucoup plus difficile à utiliser le module locale
, comme plusieurs autres ont suggéré. L'avantage est que la sortie numérique peut être faite pour suivre automatiquement les milliers (et autres) conventions de séparation appropriées utilisées dans divers pays lors de la production de choses comme les nombres, les dates et les heures. Il est également très facile de mettre en œuvre les paramètres par défaut de votre ordinateur sans apprendre un tas de codes de langue et de pays. Tout ce que vous devez faire est:
import locale
locale.setlocale(locale.LC_ALL, '') # empty string for platform's default settings
Après avoir fait cela, vous pouvez simplement utiliser le code de type générique 'n'
pour produire des nombres entiers (à la fois et float).Là où je suis, des virgules sont utilisés comme séparateur de milliers, donc après avoir réglé le lieu comme indiqué ci-dessus, voici ce qui se passerait:
print format(1234, "n") # -> 1,234
print "{:n}".format(1234) # -> 1,234
Une grande partie du reste du monde utilise des périodes au lieu de virgules à cet effet, donc définir les paramètres régionaux par défaut dans de nombreux endroits (ou en spécifiant explicitement le code pour une région dans un appel setlocale()
) produit les éléments suivants:
print format(1234, "n") # -> 1.234
print "{:n}".format(1234) # -> 1.234
sortie sur la base du 'd'
ou ',d'
mise en forme spécificateur de type est pas affectée par l'utilisation (ou non-usage) de setlocale()
. Cependant le 'd'
spécificateur est affecté si vous utilisez à la place les fonctions locale.format()
ou locale.format_string()
.
-1 Malheureusement c'est ** cassé **; il perpétue l'héritage du module de locale - ** il ne fonctionne pas correctement avec unicode **. Essayez 'format (1234, u" n ")' dans une locale (par exemple français, russe) où le séparateur des milliers est un espace NO-BREAK. Vous obtenez l'exception favorite des débutants: 'UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xa0 ...' –
@John Machin: Pour l'anecdote, la plupart des upvotes ont été faites à cette réponse avant d'ajouter la Note sur l'utilisation 'locale' - et pour l'illumination de tout le monde, quel est le pourquoi correct de l'opération d'une manière spécifique au locale qui gérera Unicode? Merci. – martineau
(1) Quand les upvotes ont été faites est de quelle pertinence ?? (2) Il n'y a pas d'illumination supportée par Python-2.X, juste un kludge: 'format (1234," n "). Decode (locale.getpreferredencoding())' :-( –