7

{:,}.format(1234)Python で別の文字を使用するように千単位の区切り記号を変更したいと思います。区切り文字は'\u066c'.

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

編集:固定されたフォントで実行可能な目立たないセパレーターに関する他の提案は大歓迎です!

4

2 に答える 2

9

あなたのオプションは、,フォーマットされた出力を取得してカンマを置き換えるか、ロケールを切り替えて'n'数値フォーマットを使用するか (現在のロケールに基づいて数値をフォーマットします)、またはbabelのようなサードパーティのライブラリを使用することです。後者を使用すると、たとえば、桁区切り記号として U+066C を使用するロケールがある場合、数値の書式設定をロケールで完全に制御できます。

format()functionを使用すると、最初のオプションは非常に簡単です。

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

ただし、西アラビア数字\u066cを直接使用するロケールをまだ見つけていません。U+066C は通常、代わりに東アラビア数字でのみ使用されます。少なくとも、Babel にはそのようなロケール データは含まれていません。

任意の babelLocaleオブジェクトをbabel.numbers.format_number()functionに渡すことができるため、カスタム セパレーターが必要な場合は、既存のロケールを複製してLocale.number_symbols['group']値を設定できます。

from copy import deepcopy
from babel import Locale

us_locale = Locale('en', 'US')
base_locale.number_symbols   # ensure instance has been populated
altered_locale = deepcopy(us_locale)
altered_locale.number_symbols['group'] = '\u066c'

._dataコピーする前に、属性 (またはプロパティ) にアクセスして、ロケール構成の読み込みをトリガーする必要があることに注意してください。そうしないと、元の (ソース) ロケールと変更されたロケールの間のデータが共有されます (そのため、us_locale上記のスニペットのオブジェクトは同じ数字区切り文字を持つことになります。

オブジェクトを使用するaltered_localeと、期待される出力が得られます。

>>> from babel.numbers import format_number
>>> format_number(1234, locale=altered_locale)
'1٬234'
于 2016-10-20T12:17:29.577 に答える