我有一个字符串,表示一个使用逗号分隔数千的数字.如何将其转换为python中的数字?
>>> int("1,000,000")
Run Code Online (Sandbox Code Playgroud)
生成一个ValueError
.
在我尝试转换它之前,我可以用空字符串替换逗号,但不知何故感觉不对.有没有更好的办法?
unu*_*tbu 93
import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
locale.atoi('1,000,000')
# 1000000
locale.atof('1,000,000.53')
# 1000000.53
Run Code Online (Sandbox Code Playgroud)
Den*_*ach 35
有几种方法可以用数千个分隔符来解析数字.我怀疑@unutbu所描述的方式在所有情况下都是最好的.这也是我列出其他方式的原因.
适当的呼叫setlocale()
地点在__main__
模块中.它是全局设置,会影响整个程序甚至C扩展(尽管注意LC_NUMERIC设置不是在系统级别设置,而是由Python模拟).阅读文档中的注意事项并在这样做之前三思而后行.单个应用程序可能没问题,但从不在图书馆中为广大受众使用它.可能你应该避免使用某些特定的字符集编码来请求语言环境,因为它可能在某些系统上不可用.
使用第三方库之一进行国际化.例如,PyICU允许使用任何可用的语言环境而不影响整个过程(甚至使用特定的千位分隔符解析数字而不使用语言环境):
NumberFormat.createInstance(区域设置( 'EN_US')).分析( "百万").getLong()
编写自己的解析函数,如果你没有安装第三方库来"正确"地执行它.它可以像int(data.replace(',', ''))
不需要严格验证时那样简单.
Cod*_*all 12
用空字符串替换逗号,并将结果字符串转换为a int
或a float
.
>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0
Run Code Online (Sandbox Code Playgroud)