Question séparateur de format de chaîne de python avec des espaces


Pour le numéro d'impression avec séparateur de milliers, on peut utiliser la chaîne de format python:

'{:,}'.format(1234567890)

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


36
2018-05-21 12:34


origine


Réponses:


Voici une solution médiocre mais simple si vous ne voulez pas gâcher avec locale:

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

36
2017-09-19 09:30



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

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

Ensuite, vous pouvez utiliser:

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

12
2017-11-11 17:42



Vous devrez utiliser le 'n' format de numéro tenant compte de l'environnement local à la place, et définir vos paramètres régionaux à 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 les paramètres régionaux actuels pour insérer les caractères de séparation des nombres appropriés.


8
2018-05-21 12:37



La réponse du @ 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 locale:

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

Le résultat dépend de votre environnement local et de la mise en œuvre de Python.

Mais que se passe-t-il si le formatage Python en fonction des paramètres régionaux est rompu, par ex. Python 3.5 sous Linux?

Variante B

Si Python ne respecte pas grouping=True paramètre, vous pouvez utiliser les paramètres régionaux et une solution de contournement (utilisez 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 plateforme. Définir la valeur monétaire sur False ou l'omettre - Python ne regroupe pas les milliers. En précisant locale._override_localeconv = {'thousands_sep': '.'} ne fais rien.

Variante C

Si vous n'avez pas le temps de vérifier ce qui fonctionne correctement et ce qui est cassé avec Python sur votre plate-forme, vous pouvez simplement utiliser la fonction de remplacement de chaîne régulière (si vous voulez

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

Remplacer une virgule par un espace est trivial (le séparateur décimal est supposé):

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


7
2018-05-25 17:26