Я пытаюсь перебрать элементы 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')