gpt4 book ai didi

python - locale.setlocale(LC_NUMERIC) : how to make it work on Windows

转载 作者:可可西里 更新时间:2023-11-01 09:33:15 25 4
gpt4 key购买 nike

我在 Win10 下。这是我的小脚本:

import locale
locale.setlocale(locale.LC_NUMERIC,"rus")

print locale.localeconv()

fv = 2.5
print str(fv)

这会打印出:

{'mon_decimal_point': '', 'int_frac_digits': 127, 'p_sep_by_space': 127, 'frac_digits': 127, 'thousands_sep': '\xa0', 'n_sign_posn': 127, 'decimal_point': ',', 'int_curr_symbol': '', 'n_cs_precedes': 127, 'p_sign_posn': 127, 'mon_thousands_sep': '', 'negative_sign': '', 'currency_symbol': '', 'n_sep_by_space': 127, 'mon_grouping': [], 'p_cs_precedes': 127, 'positive_sign': '', 'grouping': [3, 0]}
2.5

我们看到小数点是',';为什么 2,5 打印为 2.5 ??

谢谢

最佳答案

您需要调用 locale.str 方法,而不是普通的 str 构造函数。

import locale
locale.setlocale(locale.LC_NUMERIC,"ru_RU.utf8")

print locale.localeconv()

fv = 2.5
print locale.str(fv)

输出

{'mon_decimal_point': '', 'int_frac_digits': 127, 'p_sep_by_space': 127, 'frac_digits': 127, 'thousands_sep': '\xc2\xa0', 'n_sign_posn': 127, 'decimal_point': ',', 'int_curr_symbol': '', 'n_cs_precedes': 127, 'p_sign_posn': 127, 'mon_thousands_sep': '', 'negative_sign': '', 'currency_symbol': '', 'n_sep_by_space': 127, 'mon_grouping': [], 'p_cs_precedes': 127, 'positive_sign': '', 'grouping': [3, 3, 0]}
2,5

下面是一些演示简单区域设置打印功能的代码。正如我在评论中提到的,通常最好在打印时提供明确的格式规范。当然,当您不需要花哨的输出时,基本的 print a, b, c 形式很方便,例如在非常简单的脚本中以及在开发/调试期间,但是这样的输出在您使用时往往看起来很草率它适用于除最简单的情况之外的任何情况。

简单的 format_string % tuple_of_values 风格的格式化不是区域感知的。 locale 模块确实提供了几个使用旧的 % 格式化协议(protocol)的函数(formatformat_string)。但是,% 样式格式在现代 Python 中正在逐步淘汰,取而代之的是内置 format 函数和 str.format 支持的新格式格式。这些 format 函数为数字提供了本地感知格式类型说明符:n;下面的代码说明了它的用法。

# -*- coding: utf-8 -*-

import locale
locale.setlocale(locale.LC_NUMERIC, "ru_RU.utf8")

def lprint(*args):
lstr = locale.str
print ' '.join([lstr(u) if isinstance(u, float) else str(u) for u in args])

lprint(1.25, 987654, 42.0, 2.33, u"Росси́я".encode('UTF-8'), 3.456)
print locale.format_string('%.2f %d %.3f %.3f %s %f', (1.25, 987654, 42.0, 2.33, u"Росси́я", 3.456))
print '{0:n} {1:n} {2:n} {3:n} {4:n} {5}'.format(1.25, 987654, 42.0, 2.33, 3.456, u"Росси́я".encode('UTF-8'))

输出(在设置为使用 UTF-8 编码的终端中)

1,25 987654 42 2,33 Россия 3,456
1,25 987654 42,000 2,330 Россия 3,456000
1,25 987 654 42 2,33 3,456 Россия

请注意,在第二行中,我们可以传递一个 Unicode 字符串对象,因为 locale.format_string 知道编码。在输出的最后一行 987654 中打印了一个千位分隔符,在俄语语言环境中是一个空格。

如果您使用 Python 2.7(或更高版本),'{0:n} {1:n} {2:n} {3:n} {4:n} {5}'格式字符串可以简化为'{:n} {:n} {:n} {:n} {:n} {}'。当然,在 Python 3 中,print 语句不再可用:它已被 print 函数取代;您可以通过在任何其他 import 语句之前执行 from __future__ import print_function 来在更高版本的 Python 2 中访问该函数。

关于python - locale.setlocale(LC_NUMERIC) : how to make it work on Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33952550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com