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

Python 从列表中的字符串中提取整数数据,python,scrape,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

我正在使用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]

我正在避免使用“regex”或任何额外的模块。

您需要去掉空格,然后可以在
\xa0
非中断空格上拆分:

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


这使用一个循环来循环值,用以删除空格(所有制表符和回车符)并拆分空格上的剩余字符串(其中
\xa0
也是空格)。

您需要去掉空格,然后可以在
\xa0
不间断空格上拆分:

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


这使用一个循环来循环值,用以删除空白(所有制表符和回车符)并拆分空白上的剩余字符串(其中
\xa0
也是空白)。

您也可以使用单个
映射和
过滤器来执行此操作:

>>> 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]

您还可以使用单个
映射
过滤器

>>> 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]

如果您要避免使用正则表达式,为什么要将其标记为正则表达式?您的输出与您描述的输入应该产生的内容不匹配,并且您的输入中也没有前导零。我希望它能产生
[021790,023851,023905,026570]
。@MartijnPieters是的,你是对的!如果您要避免使用正则表达式,为什么要将其标记为正则表达式?您的输出与您描述的输入应该产生的内容不匹配,并且您的输入中也没有前导零。我希望它能产生
[021790,023851,023905,026570]
。@MartijnPieters是的,你是对的!它工作正常。你能解释一下代码,并参考我任何图坦卡蒙/书中的基本列表操作吗。。在一行(python新手)@Code_reaper中:我链接到了这里使用的特定技术的文档;我认为,没有一个教程能够以紧凑的方式教授这些技术。您可以在Python提示符中尝试不同的方法;在单个元素上进行测试,看看返回的是什么,例如,让您了解每个步骤的作用。它工作正常..您能解释代码并参考我的任何图坦卡蒙/书籍了解类似的基本列表操作吗。。在一行(python新手)@Code_reaper中:我链接到了这里使用的特定技术的文档;我认为,没有一个教程能够以紧凑的方式教授这些技术。您可以在Python提示符中尝试不同的方法;在单个元素上尝试它们,看看返回了什么,例如,让您了解每个步骤的作用。