2016-10-20 12 views
2

私はPythonの{:,}.format(1234)が別の文字を使用するように桁区切りを変更したいと思います。セパレータは'\u066c'である必要があります。Pythonの(ロケール)桁区切り記号をアラビア語のUnicode区切り記号に変更するにはどうすればよいですか?

他の地域設定に影響を与えずにこれを設定するにはどうすればよいですか?

EDIT:固定されたフォントで実行可能なunimposing separatorの他の提案は歓迎です!

+0

参照[この非常によく似た質問](http://stackoverflow.com/questions/5513615/add-decimal-mark-thousands-separators-to-a-number)と[PEP 378 - 何千人ものための書式指定子セパレータ](https://www.python.org/dev/peps/pep-0378 /) – smci

答えて

4

あなたのオプションは,フォーマットされた出力を取ると、コンマを置き換える、ロケールを切り替えると、(現在のロケールに基づいて番号をフォーマットします)'n'番号の形式を使用するか、またはbabelのようなサードパーティのライブラリを使用するかです。後者は、たとえば、number formattingを超える完全なロケール制御を提供します。ただし、桁区切り文字としてU + 066Cを使用するロケールがある場合に限ります。 format() function

、最初のオプションは、実際にはかなりストレートフォワードです:

>>> format(1234, ',').replace(',', '\u066c') 
'1٬234' 

私が直接しかし西アラビア数字のため\u066cを使用するロケールを見つけるためには至っていません。 U + 066Cは、一般的に東アラビア数字でのみ使用されます。 Babelには、少なくともロケールデータは含まれていません。

あなたはbabel.numbers.format_number() functionへの任意のバベルLocaleオブジェクトを渡すことができますので、あなたは、カスタムの区切りが必要な場合は、既存のロケールのクローンを作成し、Locale.number_symbols['group']値を設定することができます期待出力になり

from copy import deepcopy 
from babel import Locale 

altered_locale = deepcopy(Locale('en', 'US')) 
altered_locale.number_symbols['group'] = '\u066c' 

>>> from babel.numbers import format_number 
>>> format_number(1234, locale=altered_locale) 
'1٬234' 
+0

ありがとうございます。 Python以外のシステムロケールを変更することなく、外部関数を明示的に使用しなくても、デフォルトのPython '.format()'コマンドが異なる動作をするように簡単な方法はありません。または、Pythonでロケールを変更してセパレータを切り替えるにはどうすればよいですか? – Gerenuk

+0

@Gerenuk:Pythonでロケール*を 'locale'モジュールで設定することはできますが、* arabic千単位区切り記号を使って* decimal *の数値をフォーマットする*ロケールは見つかりません。 –

+0

ああ、それは私が言ったことです。私は適切なロケールを設定する方法を見ましたが、Pythonの内部からカスタムのファンキーな設定にロケールを変更する方法はわかりませんでした。私は今あなたの他の提案を使用すると思います。 – Gerenuk

関連する問題