【问题标题】:python list keeping empty itemspython列表保留空项目
【发布时间】:2015-06-14 05:21:34
【问题描述】:

我有一个带有 4 个 div 的 HTML 正文,其中 div 中有文本。我使用 Scrapy Selectors 删除文本并将其写入 csv。但是,如果 div 没有文本,则选择器会跳过它。这很糟糕,因为结果需要匹配 csv 中的每一列。我需要空 div 来返回空字符串。

想要的结果是:

blah,blah,,blah

由于这个要求,这不起作用:

csvfile.writerow(Selector(text=Z).xpath('//div/text()').extract())

给予:

blah,blah,blah

其中 Z 是 html 正文。

当前代码是:

for sl in Selector(text=Z).xpath('//div'):
    g = sl.xpath('./text()').extract()
    jl.append(g)

csvfile.writerow(sum(jl,[]))

这几乎可行,但我得到了一个返回列表的列表:

[u'blah'],[u'blah'],[],[u'blah']

而不是想要的:

blah,blah,,blah

如果我尝试展平列表:

csvfile.writerow(sum(jl,[]))

我回到了我开始的地方,空字符串从列表中删除。

blah,blah,blah

【问题讨论】:

    标签: python list css-selectors scrapy


    【解决方案1】:

    列表列表应该足够了,还有一个步骤:

    >>> e  = [u'blah'],[u'blah'],[],[u'blah']
    >>> [i[0] if i else '' for i in e]
    ['blah', 'blah', '', 'blah']
    

    如果你需要一个字符串中的所有这些元素:

    >>> ','.join(i[0] if i else '' for i in e)
    'blah,blah,,blah'
    

    csv.writerow() 需要一个 list,所以我不确定你是否真的想要一个字符串,但这里有两个选项。

    【讨论】:

    • 只需在该理解周围加上 ','.join(...) 就可以了。
    • csv.writerow() 获取一个列表...它将根据适当的方言将其展平。尽管您可以在推导式中使用 ''.join(i) 而不是三元运算符。
    • 最终代码为:x = [i[0] if i else '' for i in jl] csvfile.writerow(x)。我不知道它在做什么,但如果它有效,它就有效。谢谢!
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多