[英]How to format a number with comma every four digits in Python?
我有一个数字12345
,我想要结果'1,2345'
。 我尝试了以下代码,但失败了:
>>> n = 12345
>>> f"{n:,}"
'12,345'
正则表达式将为您工作:
import re
def format_number(n):
return re.sub(r"(\d)(?=(\d{4})+(?!\d))", r"\1,", str(n))
>>> format_number(123)
'123'
>>> format_number(12345)
'1,2345'
>>> format_number(12345678)
'1234,5678'
>>> format_number(123456789)
'1,2345,6789'
解释:
匹配:
(\d)
匹配一个数字...(?=(\d{4})+(?!\d))
...后面是一组或多组正好 4 位数字。代替:
\1,
用它自己和 a 替换匹配的数字,
您可以使用模数和 integer 除法将您的数字分成 10000 的块,然后使用','
分隔符进行str.join
def commas(n):
s = []
while n > 0:
n, chunk = divmod(s, n)
s.append(str(chunk))
return ','.join(reversed(s))
>>> commas(123456789)
'1,2345,6789'
>>> commas(123)
'123'
听起来像是语言环境(*) 。 这将打印12,3456,7890
( 在线尝试! ):
import locale
n = 1234567890
locale._override_localeconv["thousands_sep"] = ","
locale._override_localeconv["grouping"] = [4, 0]
print(locale.format_string('%d', n, grouping=True))
根据这个答案,我猜这是一种骇人听闻的方式。 那里的另一个答案是关于使用babel
,也许这是实现它的一种干净的方法。
(*)快速谷歌搜索发现这是在谈论中文分组四位数,并且OP的名字似乎有点中文,所以......
babel
:>>> from babel.numbers import format_decimal
>>> format_decimal(1234, format="#,####", locale="en")
'1234'
>>> format_decimal(12345, format="#,####", locale="en")
'1,2345'
>>> format_decimal(1234567890, format="#,####", locale="en")
'12,3456,7890'
此格式语法在UNICODE LOCALE DATA MARKUP LANGUAGE (LDML)中指定。 有一些轻松的睡前阅读。
stdlib
):>>> from textwrap import wrap
>>> n = 12345
>>> ",".join(wrap(str(n)[::-1], width=4))[::-1]
'1,2345'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.