【问题标题】:Extracting numbers from python vars从python vars中提取数字
【发布时间】:2021-04-28 22:29:43
【问题描述】:

基本上我是抓取一个网站并将结果保存在一个变量中。假设我的代码中有这个:

worldPopulation = [scraping and such]

现在“worldPopulation”变量有这个内容:

545.452.432.675 

世界总人口

注意:var 的上方和下方都有一个空白行。所以两行全是空白。

我一直在尝试提取数字并将它们解析到 SQLite3 数据库。我使用 INT 作为数据类型,我已经尝试过:

 re.findall(r'\b\d+\b', worldPopulation)

还有

re.findall(r'\d+', worldPopulation)

两者都给了我错误,它们是:

Line 241, in find all
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

有谁知道如何从变量中检索该数字?它以百万为单位,所以我真的不想将数字分成 4 组,每组 3 个数字,只是想要它作为一个整体。

【问题讨论】:

  • 变量包含字符串。一样。你得到什么错误?要精确。第一个示例需要数字两侧的空格,而您没有。第二个应该分别抓住四个数字。
  • 您遇到什么错误?正则表达式看起来不错。
  • 请提供更完整的示例。您说“两者都给了我错误”,但取决于worldPopulation 的定义方式,情况并非如此(尽管数字不包括句点)。请提供与其内容的实际类型相匹配的worldPopulation 的定义
  • 我怀疑问题在于worldPopulation 实际上并不包含字符串。添加创建该变量的代码。
  • 仅供参考,它是 scrape(和 scrapescraperscraped)不是报废

标签: python regex


【解决方案1】:

以下内容应该对您有所帮助:

import re

worldPopulation = '545.452.432.675 Worlds Total Population'

worldPopulation_number = int(re.sub('[a-zA-Z. ]','',worldPopulation))

如果您要查找的是分隔的数字。这可能会对您有所帮助:

import re

worldPopulation = '545.452.432.675 Worlds Total Population'

worldPopulation_numbers = [int(x) for x in re.sub('[a-zA-Z ]','',worldPopulation).split('.')]

【讨论】:

  • 这会将所有数字合并为一个数字,可能不是想要的。
  • 例如3 dogs and 10 cats 会产生 310
  • 我刚刚做了一个编辑,如果没有帮助,那么我无法理解作者在寻找什么。
  • 已经试过了,同样的错误:预期的字符串或类似字节的对象
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 2018-11-02
  • 1970-01-01
  • 2021-04-08
  • 2019-08-12
相关资源
最近更新 更多