web-dev-qa-db-fra.com

python format chaîne mille séparateur avec espaces

Pour imprimer un 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 séparateur d'espace pour des milliers?

49
wonzbak

Voici une solution mauvaise mais simple si vous ne voulez pas jouer avec locale:

'{:,}'.format(1234567890.001).replace(',', ' ')
50
Raz

La réponse de @ user136036 est assez bonne, mais malheureusement elle ne prend pas en compte la réalité des bogues Python. La réponse complète pourrait être la suivante:

Variante A

Si les paramètres régionaux de votre plate-forme fonctionnent correctement, utilisez simplement les paramètres régionaux:

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

Le résultat dépend de votre environnement local et Python fonctionne correctement.

Mais que faire si Python le formatage en fonction des paramètres régionaux est cassé, par exemple Python 3.5 sous Linux?)

Variante B

Si Python ne respecte pas le paramètre grouping=True, Vous pouvez utiliser les paramètres régionaux 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 ma plate-forme. Définir monétaire sur Faux ou l'omettre - Python ne regroupe pas des milliers. Spécifier locale._override_localeconv = {'thousands_sep': '.'} Ne fait rien.

Variante C

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

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

Remplacer la virgule pour l'espace est trivial (le point est supposé séparateur décimal):

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

16
stemd

Cela définira l'environnement local à votre emplacement de système d'exploitation par défaut:

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

Ensuite, vous pouvez utiliser:

"{0:n}".format(1234567890)
14
user136036

Vous devrez utiliser le 'n' format numérique prenant en compte les paramètres régionaux à la place, et définissez vos paramètres régionaux à un format 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 régional actuel pour insérer les caractères de séparation de nombres appropriés.

11
Martijn Pieters