Конкретный парсер XML для CSV в Python - PullRequest
0 голосов
/ 25 июня 2019

Я хочу проанализировать xml-файлы в списке, а затем преобразовать этот список в CSV-файл.Формат xml выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?> <piadocument title="USPTO-Dokument #8,027,927" guid="111126b1-f927-9bd6-9024-d18a79aaa28e">   <meta>
<list name="Inventors">
<listitem>Deeley, Simon;Bristol</listitem>
<listitem>, Stansfield, Anthony;Bristol</listitem>
</list>
<list name="Claims">
<listitem>1. An on-line system for printing ...</listitem>
<listitem>18. An on-line system for printing value bearing ...</listitem>
</list>   
</meta>  
<chapters /> 
</piadocument>

Меня интересует список name = "Claims" и я хочу написать каждый элемент списка в отдельной строке моего csv-файла.Я знаком с синтаксическим анализом XML-файлов, но не знаю, как определить тип имени списка.

Редактировать: Я снова посмотрел в своей коллекции XML-файлов и обнаружил, что имя списка не имеет претензий.атрибут listitem исключительно.Поэтому я не могу отфильтровать список, но нужно указать имя списка претензий.

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Я решил проблему сам:

from xml.etree import cElementTree as ET
import os
from time import time
t0=time()
import pandas 
InputPfad_der_xml_Dateien = "./"

claim = []
kategorie = []

for xml_file in os.listdir(InputPfad_der_xml_Dateien):
        root = ET.parse(InputPfad_der_xml_Dateien + xml_file).getroot()

        list_items = root.findall("meta/list")
        list_items_claims =[]

        for i in list_items:
            if i.get("name") == "Claims":
                list_items_claims.append(i)

        for i in list_items_claims:
            for e in i:
                claim.append(e.text)
                kategorie.append("Prozess")

data = []
data.append(claim)
data.append(kategorie)

a = pandas.DataFrame(data=data)
data1 = pandas.DataFrame.transpose(a)

pandas.DataFrame(data=data1).to_csv("./classified_claims_prozess.csv", sep=';', header=["Claim", "Category"], index = False)

print("\n\nTime: %i seconds." % (time() - t0))
0 голосов
/ 25 июня 2019
  1. Вы должны прочитать содержимое вашего файла, а затем проанализировать его как XML, для которого я бы использовал: from xml.etree import cElementTree as eT
  2. Тогда, если вас интересуют только «Заявки», вы можетепрямо через список с помощью: list_items = list(xml_parsed.iter('listitems')) # where xml_parsed is your parsed content
  3. Если у вас есть list_items, вы можете использовать .text для каждого элемента, чтобы получить его содержимое.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...