2016-04-27 2 views
2

Ich möchte ein tausend Trennzeichen in Python maßgeschneidert machen. Ich erzeuge HTML und möchte   als Tausendertrennzeichen verwenden. (Es würde wie folgt aussehen: 1 & thinsp; 000 & thinsp; 000)Generieren Sie maßgeschneiderte tausend Trennzeichen

Bisher habe ich die folgende Art und Weise fand ein , als Separator hinzuzufügen:

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

Aber ich sehe nicht, die Lage sein, zu verwenden, eine ähnliche Konstruktion, um ein anderes Trennzeichen zu erhalten. '{0:|}'.format(1000000) zum Beispiel funktioniert nicht. Gibt es eine einfache Möglichkeit, irgendetwas (, d. H.,  ) als Tausendertrennzeichen zu verwenden?

+0

[hier] (http://stackoverflow.com/a/11562205/515948) Sie regexp-basierten Ansatz finden. –

Antwort

3

Nun, man kann dies immer tun:

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

Ergebnis: '1|000|000'


Hier ist ein einfacher Algorithmus für das gleiche. Die vorherige Version davon (ThSep zwei Revisionen zurück) haben das nicht lange Separatoren wie  :

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)) 

Nennen Sie es mit ThSep(1000000, '&thinsp;') oder ThSep(1000000, '|') das gewünschte Ergebnis zu erhalten.

Es ist jedoch etwa 4 mal langsamer als die erste Methode, also können Sie versuchen, dies als eine C-Erweiterung für den Produktionscode neu zu schreiben. Dies ist nur, wenn die Geschwindigkeit sehr wichtig ist. Ich habe in einer halben Minute 2 & 1 000 negative & positive Zahlen für den Test umgerechnet.

+0

@BhargavRao, nichts. In der vorherigen Revision konnte __ 'ThSep'__ nicht mit ihnen umgehen, nicht die Version mit' replace' – ForceBru

+1

Danke dafür. PEP 378 erwähnt jedoch bereits, dass Ersetzen der richtige Weg ist. Also ich denke, es ist ein bisschen das Rad neu zu erfinden! Jedenfalls ist das überhaupt nicht falsch. Gute Antwort. Prost –

2

Es gibt keine in Art und Weise gebaut, dies zu tun, aber können Sie str.replace verwenden, wenn die Anzahl der einzige Barwert ist

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

Das in PEP 378

erwähnt wird

Der Vorschlag funktioniert gut mit Floats, Ints und Dezimalzahlen. Es ermöglicht auch eine einfache Substitution für andere Separatoren. Zum Beispiel:

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