从字符串读取数字到浮点数

时间:2014-11-11 05:27:22

标签: python

我需要将一些字符串转换为float。他们中的大多数只是数字,但其中一些也有字母。常规的float()函数会抛出错误。

a='56.78'
b='56.78 ab'

float(a) >> 56.78
float(b) >> ValueError: invalid literal for float()

一种解决方案是检查是否存在除数字之外的其他字符,但我想知道是否有一些内置函数或其他短函数给出:

magicfloat(a) >> 56.78
magicfloat(b) >> 56.78

3 个答案:

答案 0 :(得分:3)

您可以尝试从输入中删除字母:

from string import ascii_lowercase

b='56.78 ab'
float(b.strip(ascii_lowercase))

答案 1 :(得分:1)

使用regex

import re

def magicfloat(input):
    numbers = re.findall(r"[-+]?[0-9]*\.?[0-9]+", input)

    # TODO: Decide what to do if you got more then one number in your string
    if numbers:
        return float(numbers[0])

    return None

a=magicfloat('56.78')
b=magicfloat('56.78 ab')

print a
print b

输出:

56.78
56.78

答案 2 :(得分:0)

简短回答:否。

没有可以实现此功能的内置功能。<​​/ p>

ish 回答:是:

您可以做的一件事是检查字符串中的每个字符,以检查它是数字还是句点,然后从那里开始使用它:

def magicfloat(var):
    temp = list(var)
    temp = [char for char in temp if char.isdigit() or char == '.']
    var = "".join(temp)
    return var

因此:

>>> magicfloat('56.78 ab')
'56.78'
>>> magicfloat('56.78')
'56.78'
>>> magicfloat('56.78ashdusaid')
'56.78'
>>>