2016-04-27 65 views
2

我想在Python中量身定做一个千分隔符。我正在生成HTML并希望使用 作为千位分隔符。 (它看起来像:1 thinsp 000 thinsp; 000)生成量身定做千分隔符

到目前为止,我已经发现了下面的方法来添加一个,作为分隔符:

>>> '{0:,}'.format(1000000) 
'1,000,000' 

但我没有看到能够使用一个类似的结构来获得另一个分隔符。例如'{0:|}'.format(1000000)不起作用。有没有简单的方法来使用任何东西(,即, )作为千位分隔符?

+0

[这里](http://stackoverflow.com/a/11562205/515948)你可以找到一个基于正则表达式的方法。 –

回答

3

嗯,你总是可以做到这一点:

'{0:,}'.format(1000000).replace(',', '|') 

结果:'1|000|000'


下面是同样的一个简单的算法。它的前一个版本(ThSep两个修订后)没有处理长期分隔像 

def ThSep(num, sep = ','): 
    num = int(num) 

    if not num: 
     return '0' 

    ret = '' 
    dig = 0 
    neg = False 

    if num < 0: 
     num = -num 
     neg = True 

    while num != 0: 
     dig += 1 
     ret += str(num % 10) 
     if (dig == 3) and (num/10): 
      for ch in reversed(sep): 
       ret += ch 
      dig = 0 

     num /= 10 

    if neg: 
     ret += '-' 

    return ''.join(reversed(ret)) 

ThSep(1000000, '&thinsp;')ThSep(1000000, '|')调用它来得到你想要的结果。

虽然它比第一种方法慢大约4倍,所以您可以尝试将其重写为生产代码的C扩展。只有速度问题很重要。我在半分钟内为测试转换了2&thinsp; 000&thinsp; 000负数和正数。

+0

@BhargavRao,什么都没有。在之前的版本中,__'ThSep'__无法处理它们,而不是'replace'的版本。 – ForceBru

+1

感谢。但是,PEP 378已经提到替换是正确的方式。所以我想这有点重塑轮子!无论如何,这根本没有错。好答案。干杯 –

2

没有内置的方式做到这一点,但是你可以使用str.replace,如果数字是

>>> '{0:,}'.format(1000000).replace(',','|') 
'1|000|000' 

这在PEP 378

提到的唯一的现值提议运作良好与浮游物,整数和小数。它还可以轻松替换其他分隔符。例如:

format(n, "6,d").replace(",", "_")