从列表中的字符串中提取整数数据

时间:2013-11-18 09:50:45

标签: python scrape

我正在使用xpath来抓取网页的一些数据..结果如下

['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t']

现在我只需要从列表中的条目中提取整数(如果存在,则为0)..

预期输出:

[0, 21790, 0, 23851, 0, 23905, 0, 26570]

我正在避免'正则表达式'或任何额外的模块。

2 个答案:

答案 0 :(得分:4)

你需要剥离空格,然后你可以拆分\xa0不间断的空间:

[0 if not v.strip() else int(v.strip().split()[-1]) for v in inputlist]

演示:

>>> inputlist = ['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t']
>>> [0 if not v.strip() else int(v.strip().split()[-1]) for v in inputlist]
[0, 21790, 0, 23851, 0, 23905, 0, 26570]

这使用list comprehension循环遍历值,str.strip()删除空格(所有制表符和回车符)和str.split()将剩余字符串拆分为空格(其中) \xa0也是空格。

答案 1 :(得分:2)

您也可以使用一个mapfilter

来完成此操作
>>> l = ['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t']
>>> map(int, (filter(lambda x: x.isdigit(), s) or '0' for s in l))
[0, 21790, 0, 23851, 0, 23905, 0, 26570]