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

问题描述 投票:0回答:9

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

'{:,}'.format(1234567890)

但是我如何指定我想要千位分隔符的空格?

python string-formatting
9个回答
124
投票

如果你不想搞乱,这是一个糟糕但简单的解决方案

locale

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

34
投票

@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
参数,您可以使用区域设置和解决方法(使用货币格式):

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 哪些功能正常以及哪些功能出了问题,您可以使用常规字符串替换功能(如果您想将逗号和点交换为点和逗号):

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

用空格替换逗号很简单(假设点是小数点分隔符):

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


17
投票

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

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

然后你可以使用:

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

16
投票

您必须使用

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

'n'

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


7
投票
假设您编码:

print(f'{name} | Yearly salary: ${salary}.')

印刷 -> 凯特 |年薪:$60000.

首先放一个 , 分隔符:

print(f'{name} | Yearly salary: ${salary:,}.')

印刷 -> 凯特 |年薪:$60,000.

然后将逗号替换为空格:

print(f'{name} | Yearly salary: {salary:,} USD.'.replace(',', ' '))

印刷 -> 凯特 |年薪:60 000 美元。

注意:记住美元、美元或英镑、克朗等。符号应符合相应的通用标准


4
投票
Python 社区在

PEP 378 下定义了它,您可以看到主要提案包含 format()

 函数。因此,按照该建议,我建议使用以下内容:

format(1234567890, ',d').replace(',',' ')
    

0
投票
如果您不想使用本地,可以使用适用于各种大小的字符串的解决方案:

def format_number(string): j = len(string) % 3 substrings = [string[3 * i + j:3 * (i + 1) + j] for i in range(len(string)//3)] if j != 0: substrings.insert(0, string[:j]) return " ".join(substrings)
    

0
投票
我会用这样的东西:

@app.template_filter() def numberFormat(值): 返回格式(int(value), ',d').replace(',',' ')
如果我在页面上显示值,则调用过滤器,如下所示:

{{ 值 |数字格式 }}
    

-3
投票
您可以使用 f 字符串:

number = 1234567890 f"{number:,.2f}"
    
© www.soinside.com 2019 - 2024. All rights reserved.