Я хочу отформатировать цену в целое число в правильно отформатированной валюте. Пример 10000 или 10000 фунтов стерлингов

Итак, я использую следующие команды в Python

import locale
locale.setlocale(locale.LC_MONETARY, 'en_US')
or
locale.setlocale(locale.LC_MONETARY, 'en_IN')
print str(locale.currency(10000, grouping=True))

Когда я использую вышеупомянутые команды в python в Ubuntu на другом ноутбуке, они работают отлично. Но на окнах они не работают.

Это дает мне ошибку следующим образом

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\locale.py", line 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

Как решить эту ошибку?

Я использую Windows 10. Я открываю cmd и набираю "python" enter. Оболочка python представлена в следующей версии. Там я набираю вышеупомянутые команды.

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

Примечание: - я попытался скопировать файл locale.py из каталога python в системе Ubuntu в каталог Windows, т.е. "C: \ Python27 \ Lib", но он все еще не работает.

4
Avtar Singh 31 Авг 2017 в 20:33

3 ответа

Лучший ответ

Вы можете взглянуть на pycountry библиотеку, чтобы сопоставить языковые коды Windows и Linux:

>>> pycountry.languages.lookup('fr')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('french')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('chinese')
Language(alpha_2=u'zh', alpha_3=u'zho', bibliographic=u'chi', name=u'Chinese', scope=u'M', type=u'L')
>>> pycountry.languages.lookup('chinese-traditional')
Traceback (most recent call last):
  ...
LookupError: Could not find a record for 'chinese-traditional'

Тогда вы можете сделать:

import os
import locale
import pycountry

lang = "en_IN"  # your code
language = pycountry.languages.lookup(lang)
if os.name == "posix":
    locale.setlocale(locale.LC_MONETARY, language.alpha_2)
else:
    locale.setlocale(locale.LC_MONETARY, language.name)

< Сильный > ИЗМЕНИТЬ

Чтобы отформатировать значения валют, вы можете использовать Babel, например:

>>> babel.numbers.format_currency(10000, 'INR', locale='en_IN')
u'\u20b9\xa010,000.00'

>>> print(babel.numbers.format_currency(10000, 'INR', locale='en_IN'))
₹ 10,000.00
2
Laurent LAPORTE 1 Сен 2017 в 04:00

Для окон вам нужно установить locale.setlocale(locale.LC_ALL, '<language string>') https://msdn.microsoft.com/en-us /library/39cwe7zf(vs.71).aspx (устарело) https://msdn.microsoft.com/en -us / library / 39cwe7zf (v = vs.140) .aspx (обновлено).

0
Laurent LAPORTE 31 Авг 2017 в 21:14

Для Python 3.6.4 я сделал следующее на Windows 10

import locale
locale.setlocale(locale.LC_ALL,'enn')
>>'English_India.1252'
locale.currency(10000000.32,grouping=True,symbol=True)
>>'? 1,00,00,000.32'
locale.currency(10000000.32,grouping=True,symbol=True).replace('?','₹')
>>'₹ 1,00,00,000.32'
1
Balachander Kb 7 Фев 2018 в 13:36