在python中格式化数字以供显示

时间:2017-07-26 01:14:51

标签: python formatting numbers format

我试图以更易读的方式输出更长的整数。如何在一定数量的数字后将其格式化为带空格的字符串?

例如,我希望将12345678输出为1234 56 78

4 个答案:

答案 0 :(得分:5)

一个选项是使用re模块,将数字与正则表达式匹配并重新格式化:

import re
re.sub(r"(\d{4})(\d{2})(\d{2})", r"\1 \2 \3", "12345678")
# '1234 56 78'

或者为了便于阅读,您可能希望使用千位分隔符对其进行格式化:

"{:,d}".format(12345678)
# '12,345,678'

答案 1 :(得分:1)

您也可以使用itertoolsstr.join()

的组合来执行此操作
>>> from itertools import zip_longest
>>> 
>>> def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

>>> def pretty_print(start, number, delim=' '):
    number = str(number)
    end = delim.join(''.join(g) for g in grouper(number[start:], 2, ''))
    return number[:start] + delim  + end

>>> number = 12345678
>>> pretty_print(4, number, ' ')
'1234 56 78'
>>> pretty_print(4, number, ',')
'1234,56,78'
>>> pretty_print(4, number, '|')
'1234|56|78'

答案 2 :(得分:1)

你可以这样做:

>>> from itertools import islice

>>> def solve(num, n=4):
...     s = str(num)
...     fmt = [n] + [2] * ((len(s) - n) // 2);
...     it = iter(s)
...     return ' '.join(''.join(islice(it, x)) for x in fmt)

>>> solve(12345678)
'1234 56 78'

>>> solve(1234567890)
'1234 56 78 90'

答案 3 :(得分:-1)

如果数字总是8位数,那么除了使用简单的string formatting spec之外,你不需要做任何复杂的事情:

>>> '{}{}{}{} {}{} {}{}'.format(*str(12345678))
1234 56 78

如果您有任何偶数个长度为2或更长的数字,并且您希望将第一个最多4位数字分组,然后在此之后分组后面的数字对,您仍然可以很容易工作:

>>> digits8 = str(12345678)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234 56 78
>>> digits6 = str(123456)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234 56
>>> digits4 = str(1234)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234
>>> digits2 = str(12)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
12

作为一项功能:

def special_format(number):
    digits = str(int(number))
    if len(digits)%2 != 0:
        raise ValueError('Number must have an even number of digits.')
    return ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)

现在你可以这样做:

>>> special_format(12345678)
'1234 56 78'
>>> special_format(123456)
'1234 56'
>>> special_format(12345678123456)
'1234 56 78 12 34 56'
>>> special_format(12)
'12'