如果字符串中有逗号作为千位分隔符,如何将其转换为数字?
如果字符串中有逗号作为千位分隔符,如何将其转换为数字?
我有一个表示数字的字符串,其中使用逗号来分隔千位。如何在Python中将其转换为数字?
>>> int("1,000,000")
会生成一个ValueError
错误。
我可以在尝试转换之前将逗号替换为空字符串,但这种方法感觉不对。有更好的方法吗?
对于float
值,请参见如何将带有点和逗号的字符串转换为Python中的浮点数,尽管技术上基本相同。
在解析带有千位分隔符的数字时,有几种方法可以使用。但我怀疑在所有情况下,所描述的方法是否是最好的。这就是为什么我列出了其他方法。
1. 调用setlocale()
的正确位置是在__main__
模块中。它是全局设置,并将影响整个程序甚至C扩展(尽管请注意,LC_NUMERIC设置不是在系统级别设置的,而是由Python模拟的)。在阅读文档中的注意事项之后,请三思而行。在单个应用程序中可能没问题,但永远不要在面向广大受众的库中使用它。可能应该避免使用某些特定字符集编码请求区域设置,因为某些系统上可能没有可用。
2. 使用第三方国际化库之一。例如,PyICU允许在不影响整个进程的情况下使用任何可用的区域设置(甚至可以使用特定千位分隔符解析数字,而不使用区域设置):
NumberFormat.createInstance(Locale('en_US')).parse("1,000,000").getLong()
3. 如果不想安装第三方库来以“正确的方式”进行操作,则可以编写自己的解析函数。当不需要严格验证时,它可以像int(data.replace(',', ''))
这样简单。
对于推荐简单方法给予+1。当我遇到同样的问题时,这就是我所需要的。
编辑以更正一个拼写错误(setlocate
应该是setlocale
)。此外,+1。
无耻的自我推销,我使用了第三个选项。因此,如果有人感兴趣,请查看这个问题/答案。
如何将带有逗号作为千位分隔符的字符串转换为数字?
在Python中,有时候我们需要将带有逗号作为千位分隔符的字符串转换为数字。例如,将字符串'1,000,000'转换为整数1000000。这个问题的出现原因是在一些国家,人们习惯使用逗号作为千位分隔符,但在编程中,逗号通常用作数据的分隔符,所以需要找到一种方法来处理这种情况。
解决这个问题的方法之一是使用Python的locale模块。locale模块提供了一种方法来处理不同地区的数字格式。首先,我们需要设置locale,告诉Python我们希望使用的地区设置。在这个例子中,我们使用'en_US.UTF-8'作为地区设置。然后,我们可以使用locale模块中的atoi函数将带有逗号的字符串转换为整数,或者使用atof函数将带有逗号的字符串转换为浮点数。例如,可以使用locale.atoi('1,000,000')将字符串'1,000,000'转换为整数1000000。
在代码示例中,我们可以看到如何使用locale模块来解决这个问题。首先,我们导入locale模块,然后使用locale.setlocale函数设置地区设置为'en_US.UTF-8'。接下来,我们可以使用locale.atoi函数将字符串'1,000,000'转换为整数1000000,或者使用locale.atof函数将字符串'1,000,000.53'转换为浮点数1000000.53。
然而,在某些情况下,可能会遇到locale错误,提示"unsupported locale setting"。这是因为所使用的地区设置在当前系统中不可用。在Linux系统上,可以使用"locale -a"命令查看系统中可用的地区设置。而在Windows系统上,可以尝试使用这个SO答案中提到的方法来查找可用的地区设置。
总结起来,要将带有逗号作为千位分隔符的字符串转换为数字,可以使用Python的locale模块。首先,需要设置合适的地区设置,然后使用locale.atoi函数将字符串转换为整数,或者使用locale.atof函数将字符串转换为浮点数。需要注意的是,有时候可能会遇到locale错误,这时候需要查找系统中可用的地区设置。