这是我解析的xml文件的一部分
- <a:p>
- <a:r>
<a:rPr lang="en-US" sz="3600" dirty="0" />
<a:t>36%</a:t>
</a:r>
</a:p>
- <a:p>
- <a:r>
<a:rPr lang="en-US" sz="3600" dirty="0" smtClean="0" />
<a:t />
</a:r>
<a:endParaRPr lang="en-US" sz="3600" dirty="0" />
</a:p>
</p:txBody>
</p:sp>
我必须从a:t
标签中取出文本,并且代码段是beolw !!
path1 = file.xpath('/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p', namespaces=NAMESPACES)
for a in path1:
b = a.xpath('./a:r/a:rPr[@sz="3600" and @dirty="0"]',namespaces=NAMESPACES)
for c in b:
d = c.getparent().getparent()
e = d.xpath('./a:r/a:t/text()', namespaces=NAMESPACES)
print e
我有一个变量,它包含两个列表作为输出..例如
print e
结果
['38%']
[' ']
现在,我想删除第二个列表,[' ']
并仅打印['38%']
任何建议我怎么能这样做?自从我开始学习列表之前,我从未遇到过这种情况
答案 0 :(得分:0)
您有一个包含单个列表的变量,其中包含一个字符串。
现在很明显,你告诉我们你是如何获得价值的:
e = d.xpath('./a:r/a:t/text()', namespaces=NAMESPACES)
lxml's xpath
method returns a list
一些事物,当repr
'表示为字符串时。因此,['38%']
和[' ']
都是print
结果时可以看到的内容。
问题显然是您正在搜索e
两次,print
两次(或进行类似搜索并在其他地方打印)。
从你的编辑:
path1 = file.xpath('/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p', namespaces=NAMESPACES)
for a in path1:
b = a.xpath('./a:r/a:rPr[@sz="3600" and @dirty="0"]',namespaces=NAMESPACES)
for c in b:
d = c.getparent().getparent()
e = d.xpath('./a:r/a:t/text()', namespaces=NAMESPACES)
print e
循环中有e = …
和print e
。您的a
搜索会返回两个元素(每个元素都有一个返回1个元素的b
搜索),或者您的b
搜索会返回。
如果您只想获得任何结果,可以在到达print
后停止循环。例如,如果它在函数内:
path1 = file.xpath('/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p', namespaces=NAMESPACES)
for a in path1:
b = a.xpath('./a:r/a:rPr[@sz="3600" and @dirty="0"]',namespaces=NAMESPACES)
for c in b:
d = c.getparent().getparent()
e = d.xpath('./a:r/a:t/text()', namespaces=NAMESPACES)
print e
return
但是,如果您想真正了解正在发生的事情,您应该尝试在多个步骤中打印出值:
path1 = file.xpath('/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p', namespaces=NAMESPACES)
print path1
for a in path1:
b = a.xpath('./a:r/a:rPr[@sz="3600" and @dirty="0"]',namespaces=NAMESPACES)
print ' ', b
for c in b:
d = c.getparent().getparent()
e = d.xpath('./a:r/a:t/text()', namespaces=NAMESPACES)
print e