python格式带空格的字符串分隔符

python格式带空格的字符串分隔符,python,string-formatting,Python,String Formatting,对于使用千位分隔符打印数字, 可以使用python格式字符串: '{:,}'.format(1234567890) 但是我如何指定我想要一个用于千位分隔符的空格呢?您必须改用'n'区域设置识别的数字格式,并使用空格作为千位分隔符。是的,这很痛苦 'n'-编号。这与'd'相同,只是它使用当前区域设置插入适当的数字分隔符 如果您不想弄乱locale,下面是一个糟糕但简单的解决方案: '{:,}'.format(1234567890.001).replace(',', ' ') 这会将区域设置环境

对于使用千位分隔符打印数字, 可以使用python格式字符串:

'{:,}'.format(1234567890)

但是我如何指定我想要一个用于千位分隔符的空格呢?

您必须改用
'n'
区域设置识别的数字格式,并使用空格作为千位分隔符。是的,这很痛苦

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


如果您不想弄乱
locale
,下面是一个糟糕但简单的解决方案:

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

这会将区域设置环境设置为默认操作系统位置:

import locale
locale.setlocale(locale.LC_ALL, '')
然后您可以使用:

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

@user136036的答案很好,但不幸的是,它并没有考虑到Python bug的实际情况。完整答案如下:

变体A 如果平台的语言环境正常工作,则只需使用语言环境:

import locale
locale.setlocale(locale.LC_ALL, '')
print("{:,d}".format(7123001))
结果取决于您的语言环境和Python实现是否正常工作

但是,如果根据区域设置的Python格式被破坏,例如Linux上的Python 3.5,该怎么办

变体B 如果Python不考虑
grouping=True
参数,则可以使用区域设置和变通方法(使用货币格式):

在我的平台上,上面给出了12.345,68。将monetary设置为False或忽略它-Python不会将数千个组分组。 指定
locale.\u override\u localeconov={'u sep':'.}
不执行任何操作

变体C 如果您没有时间检查平台上Python的哪些功能正常工作,哪些功能出现故障,您可以使用常规的字符串替换函数(如果您想交换逗号和点对点和逗号):

打印(“{:,.2f}).格式(7123001.345).替换(“,”X”).替换(“,”X”).替换(“,”X“)

将逗号替换为空格很简单(点假定为十进制分隔符):


print(“{:,.2f}.”格式(7123001.345)。替换(“,”)

“索引1处不支持的格式字符'n'(0x6e)。可能,这只适用于Python3?@Vanuan:您使用的是什么版本的Python?我用2.6和2.7进行了测试;2.5及更高版本没有
str.format()
@Vanuan:或者您正在使用
%
字符串格式?这种类型的字符串格式在任何Python版本中都不支持
n
。这只适用于整数。我正在搜索浮点数的解决方案。
'{:,d}。格式
不依赖于区域设置。您可能将其与
'{:n}混淆了“.format
。在macOS上,您可能必须指定确切的区域设置,因为它不会提取操作系统的默认区域设置。因此,例如:locale.setlocale(locale.LC_ALL,'sv_SE.UTF-8')。它有什么不好的地方?@kasimir它有点不好。但7年后,我认为它没有那么坏。
locale.setlocale(locale.LC_ALL, '')
locale._override_localeconv = {'mon_thousands_sep': '.'}
print(locale.format('%.2f', 12345.678, grouping=True, monetary=True))