Как разобрать XML в Python и сохранить информацию в словаре - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть XML-файл от TED, говорящий со следующей структурой:

<xml language="it"><file id="1">
  <head>
    <url>http://www.ted.com/talks/travis_kalanick_uber_s_plan_to_get_more_people_into_fewer_cars</url>
    <pagesize>79324</pagesize>
    <dtime>Fri Apr 01 01:00:04 CEST 2016</dtime>
    <encoding>UTF-8</encoding>
    <content-type>text/html; charset=utf-8</content-type>
    <keywords>talks, Brand, Internet, business, cars, china, cities, economics, entrepreneur, environment, future, green, india, innovation, invention, investment, mobility, pollution, potential, society, software, sustainability, technology, transportation, web</keywords>
    <speaker>Travis Kalanick</speaker>
    <talkid>2443</talkid>
    <videourl>http://download.ted.com/talks/TravisKalanick_2016.mp4</videourl>
    <videopath>talks/TravisKalanick_2016.mp4</videopath>
    <date>2016/02/15</date>
    <title>Travis Kalanick: Il progetto di Uber di mettere più persone in meno auto</title>
    <description>TED Talk Subtitles and Transcript: Uber non ha cominciato con grandi ambizioni di ridurre il traffico e l'inquinamento. Ma quando l'azienda ha decollato, il suo cofondatore Travis Kalanick si è chiesto se ci fosse un modo per far usare Uber alle persone sullo stesso percorso e far loro condividere i tragitti, riducendo allo stesso tempo i costi e l'impronta ecologica. Il risultato: uberPOOL, il servizio di condivisione dell'auto dell'azienda, che nei suoi primi otto mesi ha tolto dalle strade 7.9 milioni di miglia e 1.400 tonnellate di diossido di carbonio dall'aria a Los Angeles. Ora Kalanick afferma che la condivisione dell'auto potrebbe funzionare anche per i pendolari nelle periferie. "Con la tecnologia a disposizione e un po' di leggi intelligenti," afferma, "possiamo trasformare ogni auto in un'auto condivisa e riappropriarci immediatamente delle nostre città."</description>
    <transcription>
      <seekvideo id="680">Stamattina, vorrei parlarvi del futuro</seekvideo>
      <seekvideo id="6064">dei trasporti a guida umana,</seekvideo>
      <seekvideo id="9560">di come possiamo ridurre il traffico, l'inquinamento e i parcheggi</seekvideo>
      <seekvideo id="15640">mettendo più persone in meno macchine,</seekvideo>
      <seekvideo id="19840">e di come possiamo farlo con la tecnologia che sta nelle nostre tasche.</seekvideo>
      <seekvideo id="25840">Sì, sto parlando degli smartphone...</seekvideo>
      <seekvideo id="28720">non delle auto senza autista.</seekvideo>
      <seekvideo id="31120">Ma per cominciare, dobbiamo tornare indietro di oltre 100 anni.</seekvideo>
 <seekvideo id="1140160">Grazie mille." TK: "Grazie mille a te."</seekvideo>
      <seekvideo id="1142240">(Applauso)</seekvideo>
    </transcription>
    <translators>
      <translator href="http://www.ted.com/profiles/2859034">Maria Carmina Distratto</translator>
    </translators>
    <reviewers>
      <reviewer href="http://www.ted.com/profiles/5006808">Enrica Pillon</reviewer>
    </reviewers>
    <wordnum>2478</wordnum>
    <charnum>14914</charnum>
  </head>
  <content>Stamattina, vorrei parlarvi del futuro dei trasporti a guida umana, di come possiamo ridurre il traffico, l'inquinamento e i parcheggi mettendo più persone in meno macchine, e di come possiamo farlo con la tecnologia che sta nelle nostre tasche. Sì, sto parlando degli smartphone... non delle auto senza autista.
Ma per cominciare, dobbiamo tornare indietro di oltre 100 anni. Perché si è scoperto che Uber esisteva molto prima di Uber. E se fosse sopravvissuta, il futuro dei trasporti sarebbe probabilmente già qui.
Permettetemi di presentarvi il Jitney. Fu creato o inventato nel 1914 da un tizio di nome LP Draper. Era un venditore di auto di Los Angeles, che ebbe un'idea: stava girando per il centro di Los Angeles, la mia città natale, e vide questi tram con lunghe file di persone che cercavano di andare dove volevano. E si disse: "Beh, perché non mettere un cartello sulla mia macchina per portare le persone ovunque vogliano per un jitney?" Un Jitney è un nichelino, in slang.
Le persone saltarono a bordo. E non solo a Los Angeles, ma in tutto il paese. E nel giro di un anno, il 1915, a Seattle si prendevano 50.000 passaggi al giorno, 45.000 passaggi al giorno in Kansas e 150.000 passaggi al giorno a Los Angeles. Per darvi un'idea, Uber a Los Angeles effettua 157.000 passaggi al giorno oggi, 100 anni dopo.
Ed ecco i tranvieri, color
 "Travis, quello che stai creando è davvero incredibile e ti sono grato per averlo condiviso apertamente sul palco di TED.
Grazie mille." TK: "Grazie mille a te."
(Applauso)</content>
</file>
<file id="2">
  <head>
    <url>http://www.ted.com/talks/magda_sayeg_how_yarn_bombing_grew_into_a_worldwide_movement</url>
    <pagesize>77162</pagesize>
    <dtime>Fri Apr 01 01:00:32 CEST 2016</dtime>
    <encoding>UTF-8</encoding>
    <content-type>text/html; charset=utf-8</content-type>
    <keywords>talks, TEDYouth, arts, beauty, creativity, entertainment, materials, street art</keywords>
    <speaker>Magda Sayeg</speaker>
    <talkid>2437</talkid>
    <videourl>http://download.ted.com/talks/MagdaSayeg_2015Y.mp4</videourl>
    <videopath>talks/MagdaSayeg_2015Y.mp4</videopath>
    <date>2015/11/14</date>
    <title>Magda Sayeg: Come lo yarn bombing è diventato un movimento internazionale</title>
    <description>TED Talk Subtitles and Transcript: L'artista di tessuti Magda Sayeg trasforma i paesaggi urbani nel suo parco giochi personale decorando gli oggetti quotidiani con colorati lavori a maglia e a uncinetto. Queste calde e pelose "bombe di filo" sono partite dalle piccole cose, con i pali degli stop e gli idranti nella città natale di Sayeg, ma presto le persone hanno trovato una connessione con quest'arte e l'hanno diffusa nel mondo. "Viviamo in un questo frenetico mondo digitale, ma desideriamo ancora qualcosa con cui possiamo relazionarci", dice Sayeg. "Si può trovare del potenziale nascosto nei luoghi più impensabili e tutti possediamo doti che aspettano solo di essere scoperte."</description>
    <transcription>
      <seekvideo id="0">Sono un'artista di tessuti</seekvideo>
      <seekvideo id="3080">meglio nota per aver dato inizio allo yarn bombing.</seekvideo>
      <seekvideo id="6080">Yarn bombing significa inserire del materiale fatto a maglia</seekvideo>
      <seekvideo id="9040">nell'ambiente urbano, tipo graffiti --</seekvideo>
      <seekvideo id="11400">o, per la precisione,</seekvideo>

Я хотел бы хранить всю информацию таким образом, чтобы Я могсопоставить идентификатор выступлений и идентификатор предложений с одинаковыми предложениями на других языках (в том же формате).

Так, например, что-то вроде словаря как: mydict ["Ted_Talk_ID"] ["Sentence_ID"]

Любая идея о том, как это сделать?

Я пытался с xml.etree.ElementTree но это не дает мне вывода (но, возможно, я сделал несколько ошибок).Мой код следующий:

import xml.etree.ElementTree as ET
root = ET.parse('ted_it-20160408.xml').getroot()
for type_tag in root.findall('url'):
    value = type_tag.get('title')
    print(value)

Спасибо!

(если это может помочь: данные взяты из https://wit3.fbk.eu/mono.php?release=XML_releases&tinfo=cleanedhtml_ted)

1 Ответ

0 голосов
/ 24 апреля 2019

вы можете использовать с помощью xml.etree.ElementTree , проверьте эту ссылку https://www.geeksforgeeks.org/xml-parsing-python/

Эта функция идеально адаптирована для вашего использования:

def parseXML(xmlfile): 

    # create element tree object 
    tree = ET.parse(xmlfile) 

    # get root element 
    root = tree.getroot() 

    # create empty list for news items 
    newsitems = [] 

    # iterate news items 
    for item in root.findall('./channel/item'): 

        # empty news dictionary 
        news = {} 

        # iterate child elements of item 
        for child in item: 

            # special checking for namespace object content:media 
            if child.tag == '{http://search.yahoo.com/mrss/}content': 
                news['media'] = child.attrib['url'] 
            else: 
                news[child.tag] = child.text.encode('utf8') 

        # append news dictionary to news items list 
        newsitems.append(news) 

    # return news items list 
    return newsitems 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...