Вот часть того, как выглядит мой 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
.
- Какое ключевое слово или синтаксис мне нужно извлечь только
00s
для каждой строки?
Затем я попытался l oop все, чтобы получить желаемые результаты (после комментирования 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 раз каждый.
Очевидно, что мой вложенный l oop неверен, так как мне заставить его выдавать мои предполагаемые строки? Я думаю, что мне может понадобиться поместить элементы в список словаря, но я не слишком хорошо знаком с этим.