【发布时间】:2020-07-11 22:21:39
【问题描述】:
我想从几十年中提取00后,但所有尝试都没有达到预期的结果。
这是我的 XML 文件的一部分,另存为 gorillas_catalog.xml。
<CATALOG>
<CD decade="00s">
<TITLE>Gorillaz</TITLE>
<ARTIST>Gorillaz</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>2001</YEAR>
</CD>
<CD decade="00s">
<TITLE>Demon Days</TITLE>
<ARTIST>Gorillaz</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Parlaphone</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
我的预期结果是这样的:
Title: Gorillaz, Album: Gorillaz, Decade: 00s
Title: Gorillaz, Album: Demon Days, Decade: 00s
我的 XML 文件的其余部分以此类推。
我测试了每个部分,并得到了以下代码:
import xml.etree.ElementTree as ET
tree = ET.parse("gorillaz_catalog.xml")
root = tree.getroot()
for ARTIST in root.iter("ARTIST"):
print("Artist:", ARTIST.text)
for TITLE in root.iter("TITLE"):
print("Title:", TITLE.text)
for decade in root.iter("CD"):
print("Decade:", decade.attrib)
十年来,我收到了Decade: {'decade': '00s'},而我只想要00s。
然后我尝试循环所有内容以获得我想要的结果(在注释掉上面的 3 for 语句之后)。
for ARTIST in root.iter("ARTIST"):
for TITLE in root.iter("TITLE"):
for decade in root.iter("CD"):
print("Artist:", ARTIST.text,", Title:", TITLE.text, ", Decade:", decade.attrib)
我得到的结果循环了 20 次到很多次:
Artist: Gorillaz , Album: Gorillaz , Decade: {'decade': 00s'}
二十次(即文件中的记录数),然后
Artist: Gorillaz , Album: Demon Days , Decade: {'decade': '80s'}
二十次...
所以这给了我想要的线路,但我不需要每次 20 次。
- 显然我的嵌套循环不正确,那么如何让它产生我想要的行?我想我可能需要将这些项目放入字典列表中,但我不太熟悉如何完成此操作。
【问题讨论】: