如何将Python中的(语言环境)千位分隔符更改为阿拉伯语Unicode分隔符?

Ger*_*nuk 4 python arabic number-formatting python-3.x digit-separator

我想更改千位分隔符,以便{:,}.format(1234)在Python中使用不同的字符.分隔符应该是'\u066c'.

如何在不影响任何其他本地设置的情况下设置此项?

编辑:欢迎使用固定字体的任何其他建议的无效分隔符!

Mar*_*ers 6

您可以选择采用,格式化输出并替换逗号,切换区域设置并使用'n'数字格式(将根据当前区域设置格式化数字),或使用像babel这样的第三方库.后者为您提供对数字格式的完全语言环境控制,例如,前提是存在使用U + 066C作为千位分隔符的语言环境.

有了这个format()功能,第一个选项非常简单:

>>> format(1234, ',').replace(',', '\u066c')
'1?234'
Run Code Online (Sandbox Code Playgroud)

我还没有找到一个直接\u066c用于西方阿拉伯数字的语言环境; U + 066C通常仅用于东方阿拉伯数字.至少,Babel不包含任何此类区域设置数据.

您可以将任何babel Locale对象传递给该babel.numbers.format_number()函数,因此如果您需要自定义分隔符,则可以克隆现有区域设置并设置Locale.number_symbols['group']值:

from copy import deepcopy
from babel import Locale

altered_locale = deepcopy(Locale('en', 'US'))
altered_locale.number_symbols['group'] = '\u066c'
Run Code Online (Sandbox Code Playgroud)

这导致预期的输出:

>>> from babel.numbers import format_number
>>> format_number(1234, locale=altered_locale)
'1?234'
Run Code Online (Sandbox Code Playgroud)