2016-12-22 5 views
0

Я пытаюсь разобрать несколько XML-файлов из разных папок с помощью lxml. Я использую os.walk() и fnmatch.filter(), чтобы найти файл xml, например, Имя папки testlog. и в этой папке есть более подпапка, и в каждом из них есть xml-файл с именем result.xml. И я пытаюсь разобрать эти XML-файлы и генерировать PDF для каждого result.xml с использованием Reportlab. И мой код для парсинга:Использовать lxml для синтаксического разбора Несколько XML-файлов в другой папке

import os 
from lxml import etree 
import fnmatch 

path = 'C:/Users/Name/Desktop/testlog' 

for root, dirs, files in os.walk(path): 
    for files in fnmatch.filter(files, 'result.xml'): 
#  print files 
     tree = etree.parse(files) 

И если я распечатать файл, я могу получить все result.xml файлов в списке, но если я пытаюсь разобрать, я получаю следующее сообщение об ошибке:

IOError: Error reading file 'result.xml' : failed to load external entity "result.xml" 

Может ли кто-нибудь сказать мне, как это решить? Заранее спасибо.

ответ

0

файлы - это просто имя файла; root - это путь к каталогу, в котором он находится. Вам нужно объединить два (скажем, используя os.path.join), чтобы открыть этот конкретный файл.

+0

Я присоединился к ним успешно, но когда я пытаюсь разобрать, я получаю следующее: «Файл» /usr/lib64/python2.7/posixpath.py », строка 77, в соединении elif path == '' или путь .endswith ('/'): AttributeError: объект 'lxml.etree._Element' не имеет атрибута 'endswith' ". Есть идеи? –

+1

Вы, кажется, не являетесь автором этого вопроса; какой код вы используете? –

+0

каталог '= os.getcwd() для корня, каталоги, файлы в os.walk (каталог): \t для файла в файлах: \t если (file.endswith() 'XML.): \t \t с открытой ('test.txt', 'а') в ТХТ: \t \t \t \t \t \t док = os.path.join (os.sep, корень, файл) \t \t \t \t \t \t док = str (doc) \t \t \t дерево = ET.parse (док) \t \t \t корень = tree.getroot() ' если я распечатать документ, он показывает полный путь, но не получить в любом месте. Код работает нормально, когда программа находится в той же папке, что и файлы xml, но когда в каталогах она терпит неудачу. –