如果字符串中有逗号作为千位分隔符,我如何使用Python将字符串转换为数字?

dsi*_*ard 76 python

我有一个字符串,表示一个使用逗号分隔数千的数字.如何将其转换为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)

  • +1,但请添加语言环境设置(默认语言环境为''C',这仍然会给出'ValueError`!). (8认同)
  • 我得到语言环境错误:`Traceback(最近一次调用最后一次):文件"F:\ test\locale_num.py",第2行,在<module> locale.setlocale(locale.LC_ALL,'en_US.UTF-8')文件"F:\ Python27\lib\locale.py",第539行,在setlocale中返回_setlocale(类别,语言环境)locale.Error:不支持的语言环境设置 (5认同)

Den*_*ach 35

有几种方法可以用数千个分隔符来解析数字.我怀疑@unutbu所描述的方式在所有情况下都是最好的.这也是我列出其他方式的原因.

  1. 适当的呼叫setlocale()地点在__main__模块中.它是全局设置,会影响整个程序甚至C扩展(尽管注意LC_NUMERIC设置不是在系统级别设置,而是由Python模拟).阅读文档中的注意事项并在这样做之前三思而后行.单个应用程序可能没问题,但从不在图书馆中为广大受众使用它.可能你应该避免使用某些特定的字符集编码来请求语言环境,因为它可能在某些系统上不可用.

  2. 使用第三方库之一进行国际化.例如,PyICU允许使用任何可用的语言环境而不影响整个过程(甚至使用特定的千位分隔符解析数字而不使用语言环境):

    NumberFormat.createInstance(区域设置( 'EN_US')).分析( "百万").getLong()

  3. 编写自己的解析函数,如果你没有安装第三方库来"正确"地执行它.它可以像int(data.replace(',', ''))不需要严格验证时那样简单.

  • +1推荐简单的方法。当我遇到同样的问题时,这就是我所需要的。 (2认同)

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)

  • 请再次阅读OP问题.特别是在他说:"在我尝试转换它之前,我可以用空字符串替换逗号,但这种方法感觉不对.有更好的方法吗?" (20认同)
  • 我发现这个答案很有用,因为我有_几乎_与 OP 相同的要求(将 strs 转换为整数),但很高兴有一种比接受的答案更简单的方法。 (3认同)