如何从python列表中的元素中提取浮点数?

时间:2016-09-11 14:56:33

标签: python regex beautifulsoup

我正在使用BeautifulSoup4构建一个执行财务计算的脚本。我已成功将数据提取到列表中,但只需要元素中的浮点数。

例如:

Volume = soup.find_all('td', {'class':'text-success'})

print (Volume)

这给了我列表输出:

[<td class="text-success">+1.3 LTC</td>, <td class="text- success">+5.49<span class="muteds">340788</span> LTC</td>, <td class="text-success">+1.3 LTC</td>,]

我希望它成为:

[1.3, 5.49, 1.3]

我该怎么做?

非常感谢你阅读我的帖子,我非常感谢我能得到的任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以在每个td内找到第一个文本节点,按空格拆分,获取第一个项目并通过float将其转换为float() - +自动处理:

from bs4 import BeautifulSoup

data = """
<table>
    <tr>
        <td class="text-success">+1.3 LTC</td>
        <td class="text-success">+5.49<span class="muteds">340788</span> LTC</td>
        <td class="text-success">+1.3 LTC</td>
    </tr>
</table>"""

soup = BeautifulSoup(data, "html.parser")

print([
    float(td.find(text=True).split(" ", 1)[0])
    for td in soup.find_all('td', {'class':'text-success'})
])

打印[1.3, 5.49, 1.3]

请注意find(text=True)有助于避免在第二个340788中提取td

答案 1 :(得分:1)

你可以做到

>>> import re
>>> re.findall("\d+\.\d+", yourString)
['1.3', '5.49', '1.3']
>>> 

然后转换为花车

>>> [float(x) for x in re.findall("\d+\.\d+", yourString)]
[1.3, 5.49, 1.3]
>>>