python格式字符串千位分隔符和空格

时间:2013-05-21 12:34:11

标签: python string-formatting

用于千位分隔符的打印号码, 可以使用python格式字符串:

'{:,}'.format(1234567890)

但是如何指定我需要一个千位分隔符的空间?

5 个答案:

答案 0 :(得分:46)

如果你不想弄乱locale

,这是一个糟糕但简单的解决方案
'{:,}'.format(1234567890.001).replace(',', ' ')

答案 1 :(得分:14)

这会将语言环境设置为您的默认操作系统位置:

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

然后你可以使用:

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

答案 2 :(得分:14)

@ user136036的答案相当不错,但不幸的是它没有考虑到Python漏洞的现实。完整答案可能如下:

变体A

如果您的平台的区域设置正常,那么只需使用区域设置:

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

结果取决于您的语言环境和Python实现是否正常。

但是,如果根据语言环境的Python格式被破坏,例如, Linux上的Python 3.5?

变体B

如果Python不尊重grouping=True参数,您可以使用区域设置和解决方法(使用货币格式):

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

上面在我的平台上给出了12.345,68。将货币设置为False或省略它 - Python不会将数千个分组。 指定locale._override_localeconv = {'thousands_sep': '.'}不执行任何操作。

变体C

如果你没有时间检查什么工作正常以及你的平台上的Python被破坏了什么,你可以使用常规字符串替换功能(如果你想交换逗号和点到点和逗号): / p>

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

替换空格的逗号是微不足道的(点是假设小数分隔符):

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

答案 3 :(得分:11)

您必须使用'n'区域设置感知数字格式,并使用set your locale来使用空格作为千​​位分隔符。是的,这很痛苦。

  

'n' - 数字。这与'd'相同,只是它使用当前区域设置插入适当的数字分隔符。

答案 4 :(得分:-2)

如果您要处理对象列并且不想弄乱语言环境,第一个答案会错过一件事:

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