2013-04-07 3 views
1

Этот код я получил где-то в Интернете, и я его отредактировал.Как загрузить файлы XML из каталога, пожалуйста,

Как загрузить файл XML из моего каталога? Есть какой-либо способ сделать это?

from elementtree import ElementTree as et 
# Load the xml content from a string 
content = et.fromstring("C:\DATA\US_Patent_Data\2012\ipgb20120103_wk01\ipgb20120103.xml") 


# Get the person or use the .findall method to get all 
# people if there's more than person 
applicant = content.find("applicant") 
last_name = applicant.find("addressbook/last-name") 
first_name = applicant.find("addressbook/first-name") 

# Get the persons address 
address = addressbook.find("address") 
street = address.find("street") 
city= address.find("city") 
state = address.find("state") 
postcode = address.find("postcode") 
country = address.find("country") 

# Print output 
print "sequence: " + applicant.attrib.get('sequence') 
print "first name: " + first_name.text 
print "last name: " + last_name.text 
print "street: " + street.text 
print "city: " + city.text 
print "state: " + state.text 
print "postcode: " + postcode.text 
print "country: " + country.text 

Я управлял программой, это то, что я получил. я скопировал часть из них ...

File "C:\Python27\lib\site-packages\elementtree\ElementTree.py", line 1292, in feed 
self._parser.Parse(data, 0) 

ExpatError: не хорошо сформированные (недействительный маркер): строка 1, столбец 2

ответ

1

fromstring функция для чтения данных XML из строки.

Для чтения xml-данных из файла вы должны использовать parse. См. docs о разборе xml с помощью elementtree.

import xml.etree.ElementTree as ET 
tree = ET.parse("C:\DATA\US_Patent_Data\2012\ipgb20120103_wk01\ipgb20120103.xml") 
root = tree.getroot() 

UPD: Похоже, ваш XML не очень хорошо образован, поскольку он имеет несколько корней. Попробуйте добавить один корневой элемент:

with open('ipgb20120103.xml', 'r') as f: 
    xml_string = "<root>%s</root>" % f.read() 

root = ET.fromstring(xml_string) 
+0

он говорит что-то вроде this.'IOError: [Errno 2] Нет такого файла или каталога: «C: \\ DATA \\ US_Patent_Data \ x812 \\ ipgb20120103_wk01 \\ ipgb20120103. xml'' Всякий раз, когда я использую etree.parse, я всегда получаю что-то вроде этого. –

+0

Это смешно странно, как 2012 можно изменить на x812. Я думаю, что он меняет путь ... Я переместил файлы на рабочий стол, теперь он дает мне другую ошибку 'Файл 'C: \ Python27 \ lib \ site-packages \ elementtree \ ElementTree.py", строка 1292, в фиде self._parser.Parse (data, 0) ExpatError: junk после элемента документа: строка 414, столбец 0' –

+0

Кстати, вы можете использовать относительные пути. Например, если файл xml и ваш скрипт находятся в одном каталоге: ET.parse ("ipgb20120103.xml"). Предоставьте полную трассировку стека ошибок и убедитесь, что ur xml действителен. – alecxe