Удаление (XML?) Разметки из документа с использованием Python - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть файл, который содержит имя ученого в следующем формате <scientist_names> <scientist>abc</scientist> </scientist_names> я хочу использовать python, чтобы вычеркнуть имена ученых из вышеуказанного формата. Как мне это сделать ?? Я хотел бы использовать обычные epressions, но не знаю, как их использовать ... пожалуйста, помогите

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

НЕ ИСПОЛЬЗУЙТЕ РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ! (все причины хорошо объяснены [здесь] )

Используйте анализатор xml / html, посмотрите на BeautifulSoup .

2 голосов
/ 13 февраля 2012

Это XML, и вы должны использовать синтаксический анализатор XML, такой как lxml вместо регулярных выражений (поскольку XML не является регулярным языком).

Вот пример:

from lxml import etree
text = """<scientist_names> <scientist>abc</scientist> </scientist_names>"""

tree = etree.fromstring(text)
for scientist in tree.xpath("//scientist"):
    print scientist.text
0 голосов
/ 13 февраля 2012

Вот простой пример, который должен обрабатывать xml-теги для вас

#import library to do http requests:
import urllib2

#import easy to use xml parser called minidom:
from xml.dom.minidom import parseString
#all these imports are standard on most modern python implementations

#download the file if it's not on the same machine otherwise just use a path:
file = urllib2.urlopen('http://www.somedomain.com/somexmlfile.xml')
#convert to string:
data = file.read()
#close file because we dont need it anymore:
file.close()
#parse the xml you downloaded
dom = parseString(data)
#retrieve the first xml tag (<tag>data</tag>) that the parser finds with name tagName,
#in your case <scientist>:
xmlTag = dom.getElementsByTagName('scientist')[0].toxml()
#strip off the tag (<tag>data</tag>  --->   data):
xmlData=xmlTag.replace('<scientist>','').replace('</scientist>','')
#print out the xml tag and data in this format: <tag>data</tag>
print xmlTag
#just print the data
print xmlData

Если вы обнаружите что-то неясное, просто дайте мне знать

0 голосов
/ 13 февраля 2012

Как уже отмечалось, это похоже на xml.В этом случае вы должны использовать анализатор xml для анализа этого документа;Я рекомендую lxml (http://lxml.de).

Учитывая ваши требования, вам может будет удобнее использовать разбор в стиле SAX, а не в стиле DOM, поскольку разбор SAXпросто включает в себя регистрацию обработчиков, когда синтаксический анализатор встречает определенный тег, если значение тега не зависит от контекста, и у вас есть более одного типа тега для обработки (что может быть не так).

Если ваш входной документ может быть сформирован неправильно, вы можете использовать Beautiful Soup: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#Parsing XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...