Я не могу разобрать в Python несколько XML-файлов - PullRequest
1 голос
/ 21 мая 2019

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

Я пытался использовать glob и list dir с os, но он не работает, и когда я запускаю python .py из терминала, я ничего не возвращаю.

Мой рабочий код только для одного XML-файла:

import xml.etree.ElementTree as ET
tree = ET.parse('provaDmarcXml2.xml')
root = tree.getroot()
org_name = root[0][0].text


domain = root[1][0].text

LlistaSource_ip = []
LlistaDkim = []
LlistaSpf = []
for source_ip in root.iter('source_ip'):
    sourceIp = source_ip.text
    LlistaSource_ip.append(sourceIp)

for dkim in root.findall("./record/row/policy_evaluated/dkim"):
    Dkim = dkim.text
    LlistaDkim.append(Dkim)


for spf in root.findall("./record/row/policy_evaluated/spf"):
    Spf = spf.text
    LlistaSpf.append(Spf)

for c in range(len(LlistaSource_ip)):
    print (org_name,"\t",end = "")
    print (domain,"\t",end='')
    print (LlistaSource_ip[c],"\t", end="")
    print (LlistaDkim[c],"\t", end="")
    print (LlistaSpf[c],"\t", end="")
    print()

Мой код не работает при попытке проанализировать несколько XML-файлов в одном каталоге.

from os import listdir
import xml.etree.ElementTree as ET


for file in listdir("path to directory"):

    with open(file, "rb"):

        tree = ET.parse(data)

        root = tree.getroot()
        org_name = root[0][0].text
        domain = root[1][0].text

        LlistaSource_ip = []
        LlistaDkim = []
        LlistaSpf = []

        for source_ip in root.iter('source_ip'):
            sourceIp=source_ip.text
            LlistaSource_ip.append(sourceIp)

        for dkim in root.findall("./record/row/policy_evaluated/dkim"):
            Dkim = dkim.text
            LlistaDkim.append(Dkim)

    for spf in root.findall("./record/row/policy_evaluated/spf"):
            Spf = spf.text
        LlistaSpf.append(Spf)

    for c in range(len(LlistaSource_ip)):
        print()

Ожидаемые результаты:

данные данные данные данные
данные данные данные данные данные данные данные данные данные данные данные данные

из всех файлов

ошибка, которую я получаю:

Traceback (последний вызов был последним): Файл "provaxmlPrograma2.py", строка 10, в дерево = ET.parse (данные) NameError: имя 'data' не определено

или мне ничего не вернется, если я исправлю это.

1 Ответ

1 голос
/ 21 мая 2019

В вашем выражении open () есть небольшая ошибка, вы должны определить его, как показано ниже.

Вы также можете добавить проверку, если file.endswith () , чтобы убедиться, что вы просто пытаетесь проанализировать xml-файлы своей папки.

from os import listdir
import xml.etree.ElementTree as ET

for file in listdir('path to file'):
    if file.endswith('.xml') or file.endswith('.XML'):
        with open(file, "rb") as data:

            tree = ET.parse(data)
            root = tree.getroot()
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...