我需要一个字符串转换格式"1.234.345,00"的float值1234345.00.
一种方法是重复使用str.replace:
x = "1.234.345,00"
res = float(x.replace('.', '').replace(',', '.'))
print(res, type(res))
1234345.0 <class 'float'>
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是手动的和非一般化的.这个备受好评的答案建议使用该locale库.但我的默认语言环境与我的输入字符串没有相同的约定.然后我发现了一种方法来提取本地约定中使用的字符作为字典:
import locale
print(locale.localeconv())
{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '',
..., 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}
Run Code Online (Sandbox Code Playgroud)
有没有办法更新此字典,另存为自定义区域设置,然后能够调用此自定义区域设置.就像是:
mylocale = locale.create_new_locale() # "blank" conventions or copied from default
mylocale.localeconv()['thousands_sep'] = '.'
mylocale.localeconv()['decimal_point'] = ','
setlocale(LC_NUMERIC, mylocale)
atof('123.456,78') # 123456.78
Run Code Online (Sandbox Code Playgroud)
如果无法做到这一点,我们如何获得所有可用语言环境及其约定的列表?似乎反模式从约定中"推断"了正确的配置(更不用说低效/手动),所以我希望有一个通用的解决方案,比如上面的伪代码.
编辑:这是我尝试找到所有语言环境的地方thousands_sep == '.'和decimal_point == ','.事实上,更一般地说,通过组合这些参数对区域设置进行分组:
import locale
from …Run Code Online (Sandbox Code Playgroud)