2013-03-01 9 views
3

Extrêmement amateur programmeur ici, à la recherche de votre aide.extraire les valeurs de xml

je dois modifier fréquemment des fichiers xml qui ressemblent à ce

--- 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 --- 

Et en utilisant une recherche regex plutôt alambiquée et remplacer processus je peux extraire seulement la valeur de l'attribut marqueur. (c'est tout ce qui m'importe).

Mais cela prend du temps et il doit y avoir un moyen assez simple en Python de rechercher l'attribut marker = "SOME_TEXT" et de plonquer toutes les valeurs dans un tableau, puis d'imprimer ce tableau (dans un fichier). Mais je ne peux pas le comprendre :(

Je cherche un moyen qui ne comprend pas l'importation de n'importe quel type de bibliothèque XML parce que je veux le garder aussi simple (et logique) que possible pour ma programmation amateur esprit d'apprendre) et je ne m'intéresse aux données de cet attribut particulier, et je me soucie pas du reste du fichier (ou c'est XML-ness).

Je demande seulement en python parce que je pense que c'est un langage dans lequel je veux entrer. mais si vous pouvez penser à un terminal Linux pour le faire (sed, awk e.t.c.) je suis heureux d'aller aussi cette route.

Excuses pour la question stupide et plutôt étendue. J'espère que vous pouvez aider.

Un grand merci, Arif

+2

Utilisez un analyseur XML à la place. – squiguy

Répondre

3

XML de correspondance avec des expressions régulières deviennent trop compliquées, trop vite. Vous avez vraiment should not do that.

Utilisez un analyseur XML au lieu, Python a le choix entre plusieurs:

  • ElementTree fait partie de la bibliothèque standard
  • lxml est une bibliothèque C en fonction rapide et riche en fonctionnalités.

ElementTree exemple:

from xml.etree import ElementTree 

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

Merci beaucoup. Mais que se passe-t-il si dans l'avenir le tas de fichiers que je reçois ne sont pas des fichiers xml? C'est pourquoi il serait bon d'avoir un processus programmatique qui cherche un certain bloc de texte, et préserve tout entre les deux. – aName

+0

@ user2122995: Si à l'avenir vous êtes envoyé un tas de fichiers qui ne sont pas des fichiers xml * vous ajustez votre code *. À l'heure actuelle, vous obtenez du XML, et un analyseur XML est le bon outil. Que faire si vous avez reçu des données JSON à la place? Votre expression régulière ne correspondrait pas non plus aux données dans ce format. –

+0

Haha, d'accord, c'est juste. Rep donné. Je vous remercie – aName

Questions connexes