2

파이썬에서 {:,}.format(1234)이 다른 문자를 사용하도록 천 단위 구분 기호를 변경하고 싶습니다. 구분 기호는 '\u066c'이어야합니다.Python에서 (로켈) 천 단위 구분 기호를 아랍어 유니 코드 구분 기호로 어떻게 바꿀 수 있습니까?

다른 지역 설정에 영향을주지 않고 어떻게 설정할 수 있습니까?

EDIT : 글꼴이 고정 된 상태에서 사용할 수없는 분리 기호에 대한 다른 제안 사항은 환영합니다!

+0

참조 [이 매우 비슷한 질문] (http://stackoverflow.com/questions/5513615/add-decimal-mark-thousands-separators-to-a-number)와 [PEP 378 - 수천 형식 지정자 Separator] (https://www.python.org/dev/peps/pep-0378 /) – smci

답변

4

귀하의 옵션은 , 형식의 출력을 가지고 쉼표를 교체 로케일을 전환 (현재 로케일에 따라 숫자를 포맷합니다)에 'n' 숫자 형식을 사용하거나 babel 같은 타사 라이브러리를 사용하는 중입니다. 후자는 number formatting 이상의 전체 로케일 제어를 제공합니다 (예 : 천 단위 구분 기호로 U + 066C를 사용하는 로켈이있는 경우). format() function

은 첫 번째 옵션은 정말 매우 직선적이다 : 내가 직접 그러나 서양 아라비아 숫자에 대한 \u066c을 사용 로케일을 찾기 위해 아직

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

; U + 066C는 일반적으로 동부 아라비아 숫자에만 사용됩니다. Babel은 적어도 그러한 로케일 데이터를 포함하지 않습니다.

사용자 정의 분리가 필요한 경우 기존 로케일을 복제하고 Locale.number_symbols['group'] 값을 설정할 수 있도록 당신의 babel.numbers.format_number() function에있는 바벨 Locale 개체를 전달할 수

:

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'.format()'명령이 다르게 동작하도록 말할 수있는 쉬운 방법이 없습니다. 또는 구분 기호를 전환하려면 파이썬에서 로케일을 어떻게 수정합니까? – Gerenuk

+0

@Gerenuk :'locale' 모듈을 사용하여 * Python에서 로케일을 설정할 수 있습니다. 그러나 아라비아 천 단위 구분 기호를 사용하여 * decimal * 숫자를 형식화하는 * 로케일을 찾을 수 없습니다. –

+0

아, 그게 내가 의미했던 것입니다. 적절한 로케일을 설정하는 방법을 보았지만, 파이썬 내부에서 사용자 정의 펑키 설정으로 로케일을 수정하는 방법을 알지 못했습니다. 나는 당신의 다른 제안을 지금 사용할 것입니다. – Gerenuk

관련 문제