python 逗号分隔符如何快速识别位数_关于python:如果字符串中有逗号作为千位分隔符,如何将字符串转换为数字?...

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

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

生成ValueError。

在我尝试转换它之前,我可以用空字符串替换逗号,但不知何故感觉不对。 有没有更好的办法?

这感觉怎么样? 功能是有原因的。

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,但请添加区域设置(使用默认区域设置'C',这仍然会给出ValueError!)。

我认为大师的意思是这样的:locale.setlocale(locale.LC_ALL,'en_US.UTF-8')

感谢您的评论。我添加了一个特定的语言环境。

非常好。这样我就可以处理逗号和点也被切换的欧洲数字。谢谢。

我得到语言环境错误:Traceback (most recent call last): File"F:\test\locale_num.py", line 2, in locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) File"F:\Python27\lib\locale.py", line 539, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting

@TonyVeijalainen:在Linux上,您可以使用locale -a查找系统上可用的语言环境。对于Windows,请尝试这样的答案。

你在哪里发现它是'en_US.UTF-8'? (这是正确的 - 我只是想知道以供将来参考。)它没有出现在python.org网站的谷歌搜索中,也没有在语言环境文档页面上的任何列表:docs.python.org/2/ library / locale.html编辑:我看到你可以找到带有locale -a的语言环境...所以解释器从操作系统本身获取有关语言环境的信息?

@AmadeusDrZaius:在Linux上,语言环境由glibc提供。

有没有什么方法,类似于这个答案,将带逗号的字符串转换为小数?

@EliasZamaria:我认为没有内置函数,但您可以使用replace来删除逗号:decimal.Decimal('123,456.789'.replace(',',''))。

@unutbu,谢谢。我知道我能做到。我只是想知道是否有一种更简单的方式,类似于你的答案。

这对我不起作用,但这样做了 - stackoverflow.com/questions/48843193/

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

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

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

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

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

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

编辑修复错字(setlocate应setlocale)。另外,+1。

无耻的自我推销,我确实使用了第三种选择。所以,如果有人有兴趣,请看看这个问题/答案

用空字符串替换逗号,并将结果字符串转换为int或float。

>>> a = '1,000,000'

>>> int(a.replace(',' , ''))

1000000

>>> float(a.replace(',' , ''))

1000000.0

请再次阅读OP问题。特别是在他说:"在我尝试转换它之前,我可以用空字符串替换逗号,但这种方法感觉不对。有更好的方法吗?"

我发现这个答案很有用,因为我的要求与OP几乎相同(将strs转换为int),但我很高兴有一种比接受的答案更简单的方法。

这有效:

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

>>> a='-1,234,567,89.0123'

>>>"".join(a.split(","))

'-123456789.0123'

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

我试过这个。它有点超出了这个问题:

你得到一个输入。它将首先转换为字符串(如果它是一个列表,例如来自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

#python3 tenzin

def changenum(data):

foo =""

for i in list(data):

if i ==",":

continue

else:

foo += i

return  float(int(foo))

一些解释与该代码一起使用?一碗汤通常配汤匙

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


版权声明:本文为weixin_34177886原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。