Python format chaîne séparateur de milliers avec des espaces
4 réponses
Voici une solution mauvaise mais simple si vous ne voulez pas déconner avec locale
:
'{:,}'.format(1234567890.001).replace(',', ' ')
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)
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.
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(",", " ")