2013-03-01 2 views
3

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

Я должен часто редактировать XML-файлы, которые выглядят как этот

--- blah blah blah plenty xml stuff above --- 
    <lex marker="mala" sentiment="negative"/> 
    <lex marker="malas" sentiment="negative"/> 
    <lex marker="maleducad\p{Ll}*" sentiment="negative" regex="true"/> 
    <lex marker="mali\p{Ll}+sima\p{Ll}*" sentiment="negative" regex="true"/> 
    <lex marker="mali\p{Ll}+simo\p{Ll}*" sentiment="negative" regex="true"/> 
    --- blah blah blah plenty xml stuff below --- 

И с помощью довольно запутанный поиском регулярных выражений и заменить процесс можно извлечь только значение атрибута маркеров. (это все, что мне нужно).

Но это занимает много времени, и в Python должен быть довольно простой способ поиска атрибута marker = "SOME_TEXT" и plonk все значения в массив, а затем распечатать этот массив (в файл). Но я не могу понять :(

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

Я только прошу в python, потому что я думаю, что это язык, на который я очень хочу попасть. но если вы можете подумать о способе Linux Terminal для этого (sed, awk e.t.c.), я тоже с удовольствием поеду на этот маршрут.

Извинения за немой и довольно расширенный вопрос. Надеюсь, ты поможешь.

Большое спасибо, Ариф

+2

Используйте вместо XML-анализатор. – squiguy

ответ

3

Matching XML с регулярными выражениями становятся слишком сложными, слишком быстро. Вы действительно should not do that.

Используйте XML парсер вместо Python имеет несколько на выбор:

  • ElementTree является частью стандартной библиотеки
  • lxml быстрой и навороченным C-библиотека на основе.

ElementTree пример:

from xml.etree import ElementTree 

tree = ElementTree.parse('filename.xml') 
for elem in tree.findall('lex'): 
    print elem.attrib['marker'] 
+0

Большое спасибо. Но что, если в будущем куча файлов, которые я получаю, не являются файлами xml? поэтому было бы полезно иметь программный процесс, который ищет определенный блок текста и сохраняет все между этим. – aName

+0

@ user2122995: Если в будущем вам отправят кучу файлов, которые не являются xml-файлами *, вы скорректируете свой код *. Прямо сейчас вы получаете XML, а XML-парсер - правильный инструмент. Что делать, если вместо этого вы отправили данные JSON? Ваше регулярное выражение не будет соответствовать данным в этом формате. –

+0

Ха-ха, хорошо, достаточно. Реп. спасибо – aName

Смежные вопросы