我有一个字符串,表示一个使用逗号分隔数千的数字。如何将其转换为python中的数字?
>>> int("1,000,000")
生成ValueError
。
在我尝试转换之前,我可以用空字符串替换逗号,但不知何故感觉不对。还有更好的方法吗?
答案 0 :(得分:90)
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
答案 1 :(得分:32)
有几种方法可以用千位分隔符解析数字。我怀疑@unutbu所描述的方式在所有情况下都是最好的。这也是我列出其他方式的原因。
调用setlocale()
的正确位置在__main__
模块中。它是全局设置,会影响整个程序甚至C扩展(尽管注意LC_NUMERIC设置不是在系统级别设置,而是由Python模拟)。阅读caveats in documentation并在采取这种方式之前三思而后行。单个应用程序可能没问题,但从不在图书馆中为广大受众使用它。可能你应该避免使用某些特定的字符集编码来请求语言环境,因为它可能在某些系统上不可用。
使用第三方库之一进行国际化。例如,PyICU允许使用任何可用的语言环境而不影响整个过程(甚至不使用语言环境解析具有特定千位分隔符的数字):
NumberFormat.createInstance(区域设置( 'EN_US'))。分析( “百万”)。getLong()
编写您自己的解析函数,如果您没有安装第三方库以“正确方式”执行此操作。当不需要严格验证时,它可以像int(data.replace(',', ''))
一样简单。
答案 2 :(得分:12)
用空字符串替换逗号,并将结果字符串转换为int
或float
。
>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0
答案 3 :(得分:5)
这有效:
(一种肮脏但快速的方式)
>>> a='-1,234,567,89.0123'
>>> "".join(a.split(","))
'-123456789.0123'
答案 4 :(得分:3)
我从接受的答案中得到了语言环境错误,但以下更改在芬兰(Windows XP)中有效:
import locale
locale.setlocale( locale.LC_ALL, 'english_USA' )
print locale.atoi('1,000,000')
# 1000000
print locale.atof('1,000,000.53')
# 1000000.53
答案 5 :(得分:1)
我试过这个。它有点超出了这个问题: 你得到一个输入。它将首先转换为字符串(如果它是一个列表,例如来自Beautiful soup); 然后到int, 然后漂浮。
它尽可能地得到。在最坏的情况下,它会返回未转换为字符串的所有内容。
def to_normal(soupCell):
''' converts a html cell from beautiful soup to text, then to int, then to float: as far as it gets.
US thousands separators are taken into account.
needs import locale'''
locale.setlocale( locale.LC_ALL, 'english_USA' )
output = unicode(soupCell.findAll(text=True)[0].string)
try:
return locale.atoi(output)
except ValueError:
try: return locale.atof(output)
except ValueError:
return output
答案 6 :(得分:0)
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'en_US.UTF-8'
>>> print locale.atoi('1,000,000')
1000000
>>> print locale.atof('1,000,000.53')
1000000.53
这是在美国的Linux上完成的。
答案 7 :(得分:0)
SHELL = CMD