XML ElementTree. Проблемы с анализом при предоставлении каталога XML-файла. - PullRequest
0 голосов
/ 08 июля 2019

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

Использование Python 2.6 (по ограничительным причинам) У меня есть функция, которая хорошо работает, когда ElementTree передается строка файла, такая как 'rx_XML.xml' ( при условии, что мой скрипт работает из той же директории ). Но при передаче пути к файлу типа '/ my / log / dir / rx_XML.xml' функции ElementTree не удается найти файл, и я получаю следующую ошибку:

self._parser.Parse("", 1) # end of data
xml.parsers.expat.ExpatError: no element found: line 1, column 0

К сожалению, я ограничен использованием Python 2.6 и его библиотек по умолчанию, что значительно усложняет задачу. Вот моя функция синтаксического анализа XML:

import os, sys
from xml.etree.ElementTree import ElementTree

def xmlDictionary(xmlfile):
    #xmlfile value works ok with filename e.g. 'rx_XML.xml'
    #xmlfile fails with directory plus filename e.g. '/my/log/dir/rx_XML.xml'
    root = ElementTree(file=xmlfile)

    #Create an iterator
    iter = root.getiterator()

    xmlDict = {}
    #Iterate
    for element in iter:
        #iterate over elements, drop things into dictionary for use later

Если есть возможность, вот части моего кода для извлечения данных XML из большого текстового файла:

for dirname, dirnames, filenames in os.walk('/my/log/dir/'):
    for file in filenames:
        if file.endswith('textfile.txt'):
            file = os.path.join(dirname,file)           
            with open(file, "r") as f:
                lines = f.readlines()
                for line in lines:
                    if ('<xmlfile>' in line):
                        #XML section found, create a new file
                        rxfile = os.path.join(dirname, 'rx_XML.xml')                        rxoutfile = open(rxfile, 'w')
                        rxoutfile.write(line)
                        #start writing to file
                        ....

                    if (line.startswith('</xmlfile>')):
                        rxoutfile.write(line)
                        rxoutfile.close 
                        rxDict = xmlDictionary('rx_XML.xml')
...