2016-04-27 61 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(",", "_")