Python format chaîne séparateur de milliers avec des espaces

pour l'impression nombre avec mille séparateur, on peut utiliser la chaîne de format python:

'{:,}'.format(1234567890)

mais comment puis-je spécifier que je veux un espace pour séparateur de milliers?

37
demandé sur jamylak 2013-05-21 16:34:11

4 réponses

Voici une solution mauvaise mais simple si vous ne voulez pas déconner avec locale:

'{:,}'.format(1234567890.001).replace(',', ' ')
36
répondu Raz 2013-09-19 09:30:55

cela définira l'environnement locale à l'emplacement de votre OS par défaut:

import locale
locale.setlocale(locale.LC_ALL, '')

Ensuite, vous pouvez utiliser:

"{0:n}".format(1234567890)
12
répondu user136036 2013-11-11 17:42:03

vous devrez utiliser le 'n' format de nombre conscient de locale à la place, et réglez votre locale pour celui qui utilise un espace comme séparateur de milliers. Oui, c'est douloureux.

'n' - Nombre. C'est la même chose que 'd', sauf qu'il utilise le paramètre locale actuel pour insérer les caractères de séparateur de nombre appropriés.

8
répondu Martijn Pieters 2013-05-21 12:37:31

Réponse de @user136036 est assez bonne, mais malheureusement il ne tient pas compte de la réalité de Python bugs. Réponse pourrait être la suivante:

Variante A

si locale de votre plate-forme fonctionne correctement, alors utilisez juste locale:

import locale
locale.setlocale(locale.LC_ALL, '')
print("{:,d}".format(7123001))

le résultat dépend du bon fonctionnement de votre implémentation locale et Python.

mais que se passe-t-il si le formatage Python selon la locale est cassé, par exemple Python 3.5 sous Linux?

Variante B

si Python ne respecte pas grouping=True paramètre, vous pouvez utiliser locale et une solution de contournement (utiliser le format monétaire):

locale.setlocale(locale.LC_ALL, '')
locale._override_localeconv = {'mon_thousands_sep': '.'}
print(locale.format('%.2f', 12345.678, grouping=True, monetary=True))

ci-dessus donne 12.345,68 sur mon quai. Définir monétaire à False ou l'omettre-Python ne groupera pas des milliers. En précisant locale._override_localeconv = {'thousands_sep': '.'} ne rien faire.

Variante C

si vous n'avez pas le temps de vérifier ce qui fonctionne bien et ce qui est cassé avec Python sur votre plate-forme, vous pouvez juste utiliser la fonction de remplacement de chaîne régulière (si vous voulez échanger des virgules et de points à points et des virgules):

print("{:,.2f}".format(7123001.345).replace(",", "X").replace(".", ",").replace("X", "."))

remplacer virgule Par espace est trivial (le point est supposé séparateur décimal):

print("{:,.2f}".format(7123001.345).replace(",", " ")

8
répondu stemd 2016-05-25 17:26:42