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

won*_*bak 56 python string-formatting

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

'{:,}'.format(1234567890)
Run Code Online (Sandbox Code Playgroud)

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

Raz*_*Raz 55

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

'{:,}'.format(1234567890.001).replace(',', ' ')
Run Code Online (Sandbox Code Playgroud)

  • @kasimir 这很老套。但7年后我认为情况并没有那么糟糕。 (5认同)
  • 它有什么不好呢? (2认同)

小智 16

@ user136036的答案非常好,但不幸的是它没有考虑到Python漏洞的现实.完整的答案可能如下:

变式A.

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

import locale
locale.setlocale(locale.LC_ALL, '')
print("{:,d}".format(7123001))
Run Code Online (Sandbox Code Playgroud)

结果取决于您的语言环境和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))
Run Code Online (Sandbox Code Playgroud)

以上在我的平台上给出了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(",", " ")

  • `'{:,d}'.format` 不依赖于语言环境。您可能会将其与“{:n}”.format 混淆。 (2认同)

use*_*036 14

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

import locale
locale.setlocale(locale.LC_ALL, '')
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

"{0:n}".format(1234567890)
Run Code Online (Sandbox Code Playgroud)

  • 这不会添加空格。 (3认同)

Mar*_*ers 11

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

'n' - 数量.'d'除了它使用当前语言环境设置插入适当的数字分隔符之外,它是相同的.


Pat*_*rik 10

假设您编写代码:

\n
print(f'{name} | Yearly salary: ${salary}.')\n
Run Code Online (Sandbox Code Playgroud)\n
\n

打印 -> 凯特 | 年薪:60000美元。

\n
\n

首先放一个 , 分隔符:

\n
print(f'{name} | Yearly salary: ${salary:,}.')\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n

然后将逗号替换为空格:

\n
print(f'{name} | Yearly salary: {salary:,} USD.'.replace(',', ' '))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n

注意:记住 USD、$ 或 \xc2\xa3、克朗等。符号应符合相应的通用标准

\n