保留空项的python列表
我有一个HTML正文,有4个div,div中有文本。我使用Scrapy选择器删除文本并将其写入csv。但是,如果div没有文本,选择器将跳过它。这是不好的,因为结果需要与csv中的每个列匹配。我需要空div来返回空字符串 预期结果是:保留空项的python列表,python,list,css-selectors,scrapy,Python,List,Css Selectors,Scrapy,我有一个HTML正文,有4个div,div中有文本。我使用Scrapy选择器删除文本并将其写入csv。但是,如果div没有文本,选择器将跳过它。这是不好的,因为结果需要与csv中的每个列匹配。我需要空div来返回空字符串 预期结果是: blah,blah,,blah 由于这一要求,这不起作用: csvfile.writerow(Selector(text=Z).xpath('//div/text()').extract()) 给予: blah,blah,blah 其中Z是html主体 目前
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
这个列表应该足够了,还有一个步骤:
>>> 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()
需要一个列表,所以我不确定您是否真的想要一个字符串,但这里有两个选项。只需添加一个,'。加入(
…)
理解,您就很好了。csv.writerow()接受一个列表。。。它将根据适当的方言将其展平。虽然您可以在理解中使用'.join(i)
,而不是三元运算符。最终代码是:x=[i[0]if i else'',用于jl]csvfile.writerow(x)
。我不知道它在做什么,但如果它起作用,它就会起作用。谢谢