2016-04-27 4 views
2

Pythonで区切り文字を千単位に調整したい。私はHTMLを生成しており、千セパレータとして を使用したいと考えています。これまでのところ私は、セパレータとして,を追加するには、次の方法を発見したオーダーメイドの千の区切り文字を生成する

を:

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

しかし、私は使用することができるように表示されていない:(000; 000&thinsp 1&thinspそれは次のようになります。)別のデリミタを得るための同様の構造。たとえば'{0:|}'.format(1000000)は機能しません。何千ものセパレータとして何か(つまり )を使用する簡単な方法はありますか?

+0

【こちら】(http://stackoverflow.com/a/11562205/515948)あなたは正規表現ベースのアプローチを見つけることができます。 –

答えて

3

さて、あなたは、常にこの操作を行うことができます。

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

の検索結果を:


'1|000|000'は、ここで同じのための単純なアルゴリズムです。それ以前のバージョン(ThSep二つのリビジョンバック)が のように長い区切りを処理していませんでした:ThSep(1000000, ' ')またはThSep(1000000, '|')

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

コール、それはあなたが望む結果を得るために。

これは、最初の方法より約4倍遅いので、これを実動コードのC拡張として書き直すことができます。これはスピードが重要な場合のみです。私は2&thinsp; 000&thinsp; 000を負の数と正の数を半分の時間で変換しました。

+0

@BhargavRao、何もありません。以前のリビジョンでは、__'ThSep'__は 'replace 'のバージョンではなく、それらを処理できませんでした – ForceBru

+1

ありがとうございました。しかし、PEP 378はすでに置換が正しい方法であると言います。だから私はそれがホイールを再発明するのですね!とにかく、全く間違っていません。いい答えだ。乾杯 –

2

これは、提案はうまく機能PEP 378

に記載されている

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

そこにはこれを行う方法で構築された、しかし、数が唯一の現在価値である場合は、

str.replaceを使用することができます浮動小数点、整数、および小数を使用します。また、他の区切り文字を簡単に置き換えることもできます。たとえば、次のように

format(n, "6,d").replace(",", "_") 
関連する問題