如果使用Python将string转换为数字(如果它包含千位分隔符的逗号)?

我有一个string表示一个使用逗号分隔数千的数字。 我如何将其转换为Python中的数字?

>>> int("1,000,000") 

生成一个ValueError

在我尝试转换之前,我可以用空string来replace逗号,但是感觉不对。 有没有更好的办法?

 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 

有几种方法可以用数千个分隔符来parsing数字。 我怀疑〜Ubuntu所描述的方式在所有情况下都是最好的。 这就是我列出其他方式的原因。

  1. 调用setlocale()的适当位置在__main__模块中。 这是全局设置,将影响整个程序甚至C扩展(尽pipe注意LC_NUMERIC设置不是在系统级设置,而是由Python模拟)。 阅读文档中的警告,并在这样做之前三思。 在单一的应用程序中可能是确定的,但是不要在库中用于广泛的用户。 可能你应该避免请求一些特定的字符集编码的区域设置,因为它可能在某些系统上不可用。

  2. 使用第三方库进行国际化。 例如, PyICU允许使用任何可用的语言环境,而不影响整个过程(甚至不使用区域设置来parsing具有特定数千个分隔符的数字):

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

  3. 编写你自己的parsing函数,如果你没有安装第三方库来做“正确的方法”。 当不需要严格validation时int(data.replace(',', ''))它可以像int(data.replace(',', ''))一样简单。

用空stringreplace逗号,并将结果string变成intfloat

 >>> a = '1,000,000' >>> int(a.replace(',' , '')) 1000000 >>> float(a.replace(',' , '')) 1000000.0 

我从接受的答案中得到了语言环境错误,但在芬兰(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 

这工作:

(一个肮脏但快速的方式)

 >>> a='-1,234,567,89.0123' >>> "".join(a.split(",")) '-123456789.0123' 

我试过这个。 它超出了这个问题:你得到一个input。 它将首先转换为string(如果它是一个列表,例如美丽的汤); 然后int,然后浮动。

它尽可能地得到。 在最坏的情况下,它返回所有未转换的string。

 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 
 >>> 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上完成的。 -Suresh

 #python3 tenzin def changenum(data): foo = "" for i in list(data): if i == ",": continue else: foo += i return float(int(foo))