Python将值清除为int

JSON端点返回我想要转换为int的值以保存在DB(mysql)中.

值可以采用以下格式:

> 100000
> 100,000
> 100.000
> 100 000
> 100000.00
> 100,000.00
> 100.000,00
> 100 000.00
>不适用

我是python的新手,无法弄清楚如何处理每个案例.我试过了:

int(value) if value != 'N/A' else None

哪个处理N / A但是抛出一个ValueError:int()的无效文字,对于任何非本地格式化的东西,其基数为10

local.atoi(value) if value != 'N/A' else None

用逗号处理所有值,但抛出一个ValueError:int()的无效文字,带有基数10:对于任何带浮点数的东西或任何带句点而不是逗号为千分隔符的东西.

如何捕获并清除所有整数格式?

最佳答案 棘手的部分似乎是区分小数点和千位分隔符,因为一些数字似乎使用a.对彼此而言.但似乎数字有零或两位小数,所以我们可以使用这条带小数部分(无论如何都不需要int).

>>> nums = ["100000","100,000","100.000","100 000","100000.00","100,000.00","100.000.00","100 000.00"]
>>> [re.sub(r"[.,]\d{2}$", "", n) for n in nums]
['100000', '100,000', '100.000', '100 000', '100000', '100,000', '100.000', '100 000']

然后,只需删除任何非数字字符并转换为int.

>>> [int(re.sub(r"[ ,.]", "", n)) for n in _]
[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]

只需将re.sub操作包含在一个函数中,同时检查N / A.

如果您知道这些数字的区域设置,您还可以尝试语言环境或babel模块:

>>> import babel.numbers
>>> babel.numbers.parse_decimal("100,000.000", "en")
Decimal('100000.000')
>>> babel.numbers.parse_decimal("100,000.000", "de")
Decimal('100.000000')

那些返回十进制数,可以很容易地转换为int.如果你不知道语言环境,并且不能保证固定/最大小数位数,我不知道你怎么决定是否例如100.000应该是100或100000.

点赞