Python - 使用“继续”循环通过 FOR 语句(Craigslist 发布)

Posted

技术标签:

【中文标题】Python - 使用“继续”循环通过 FOR 语句(Craigslist 发布)【英文标题】:Python - looping through a FOR statement using 'continue' (Craigslist posting) 【发布时间】:2017-02-19 17:16:45 【问题描述】:

我正在尝试在单个 Craiglist 公寓发布的属性表中查找特定的文本短语('w/d in unit')。该短语的位置可能会有所不同,具体取决于该表中列出了多少其他属性。例如,“w/d in unit”可能位于:

    在第 3 位:

    猫没事; 狗没事; w/d 单位

    在位置 2:

    猫没事; w/d 单位; 公寓

为了说明位置的可变性,我编写了 Python 代码:

 attr = response.xpath("//*[@class='attrgroup']/span")

    for i in range (0, len(attr)):
        if 'w/d in unit' in attr[i].xpath("text()").extract():
            item["washerDryer"] = attr[i].xpath("text()").extract()
        else:
            continue

    return item

我的问题是:

    当声明if 'w/d in unit' in attr[i].xpath("text()").extract(): 为假时,如何让我的item["WasherDryer"] 存储值“None”? 我可以把它放在else 语句(where item["WasherDryer"] = "None") 下,但是循环不会继续迭代到下一个i

【问题讨论】:

【参考方案1】:

您可以使用 extract_first 并将默认值传递给它。 以下是它的使用方法:

for i in range (0, len(attr)):
     item["washerDryer"] = attr[i].xpath("text()").extract_first(default='None')

【讨论】:

谢谢!然而,这种改变并没有奏效。我昨天修改了我的原始代码,现在它可以工作了(见下面问题的答案)。 很高兴听到这个消息!下次请发一点源文件。这将大大简化任务。祝你有美好的一天!【参考方案2】:

我昨天修改了我的原始代码。我意识到在进行迭代之前,我首先需要确定文本“w/d in unit”是否存在。

我们在这里做的是:

1) 查看文本 'w/d in unit' 是否出现在字符串 'attr' 的任何位置 2)如果是,则继续迭代 3) 如果没有,则自动标记该项目['washerDryer'] = 'None'

        if 'w/d in unit' in str(attr):
            for i in range (0, len(attr)):
                if 'w/d in unit' in attr[i].xpath("text()").extract():
                    item["washerDryer"] = attr[i].xpath("text()").extract()
                else:
                    continue
        else:
            item["washerDryer"] = "None"

【讨论】:

以上是关于Python - 使用“继续”循环通过 FOR 语句(Craigslist 发布)的主要内容,如果未能解决你的问题,请参考以下文章

Python:在外循环中继续下一次迭代

python 双层for循环,在第二层的for循环中的else中的continue,会退出到第一层for循环继续执行

异常处理并在 python 中继续 for 循环

让你彻底弄懂python循环语句

Python3基础 使用for循环 删除一个列表中的重复项

失败的循环:询问用户是不是希望继续(Python)