日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python locale模块_使用python2.X的locale模块格式化数字和货币

發布時間:2025/3/21 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python locale模块_使用python2.X的locale模块格式化数字和货币 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任務是以一種支持區域設置的方式將數字、貨幣金額和日期格式化為unicode字符串。在

第一次天真的數字嘗試給了我們希望:Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> import locale

>>> locale.setlocale(locale.LC_ALL, '')

'English_Australia.1252'

>>> locale.format("%d", 12345678, grouping=True)

'12,345,678'

>>> locale.format(u"%d", 12345678, grouping=True)

u'12,345,678'

>>>

現在試試法語:

^{pr2}$

這是怎么回事?在>>> locale.localeconv() # output edited for brevity

{'thousands_sep': '\xa0', 'mon_thousands_sep': '\xa0', 'currency_symbol': '\x80'}

哇!看起來有點老土。一個解決辦法表明:>>> locale.format("%d", 12345678, grouping=True).decode(locale.getpreferredencoding())

u'12\xa0345\xa0678'

>>>

更新1locale.getpreferredencoding()不是正確的方法;請使用locale.getlocale()[1]:Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> import locale

>>> locale.getpreferredencoding(), locale.getlocale()

('cp1252', (None, None))

>>> locale.setlocale(locale.LC_ALL, '')

'English_Australia.1252'

>>> locale.getpreferredencoding(), locale.getlocale()

('cp1252', ('English_Australia', '1252'))

>>> locale.setlocale(locale.LC_ALL, 'russian_russia')

'Russian_Russia.1251'

>>> locale.getpreferredencoding(), locale.getlocale()

('cp1252', ('Russian_Russia', '1251')) #### Whoops! ####

>>>

更新2strftime()系列和str.格式()>>> locale.setlocale(locale.LC_ALL, 'french_france')

'French_France.1252'

>>> format(12345678, 'n')

'12\xa0345\xa0678'

>>> format(12345678, u'n') # type triggers cast to unicode somehow

Traceback (most recent call last):

File "", line 1, in

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 2: ordinal not in range(128)

>>> import datetime;datetime.date(1999,12,31).strftime(u'%B') # type is ignored

'd\xe9cembre'

>>>

在所有情況下,解決方法是在調用這些方法時只使用str對象,獲得str結果,并使用locale.getlocale()[1]獲得的編碼對其進行解碼

其他問題:

(1)在測試/探索Windows語言環境名稱不僅與POSIX(“fr_-fr”)不同,而且冗長,而且沒有完全文檔化,這是一個相當麻煩的問題。例如,顯然印度的分組不是“每3位數”。。。我找不到可以用來探索的地方;像“印地語”和“印地語印度語”這樣的嘗試是行不通的。在

(2)有些localeconv()數據是完全錯誤的。E、 g.對于韓語,貨幣符號是'\\',即一個反斜杠。我知道一些7位舊字符集與ASCII不兼容,chr(92)有時用于本地貨幣符號,所以我希望'\\'.decode('949')生成一個won符號,而不僅僅是u'\\'

我知道像babel這樣的模塊,但我并不特別想強加一個像那樣的大的外部依賴。我能同時得到正確和方便嗎?關于locale模塊,我有什么遺漏嗎?在

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python locale模块_使用python2.X的locale模块格式化数字和货币的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。