Analyse le fichier XML dans un objet Python
J'ai un fichier XML qui ressemble à ceci:
<encspot>
<file>
<Name>some filename.mp3</Name>
<Encoder>Gogo (after 3.0)</Encoder>
<Bitrate>131</Bitrate>
<Mode>joint stereo</Mode>
<Length>00:02:43</Length>
<Size>5,236,644</Size>
<Frame>no</Frame>
<Quality>good</Quality>
<Freq.>44100</Freq.>
<Frames>6255</Frames>
..... and so forth ......
</file>
<file>....</file>
</encspot>
J'ai envie de la lire dans un objet python, quelque chose comme une liste de dictionnaires. Car le balisage est absolument fixe, je suis tenté d'utiliser des regex (je suis assez bon à l'aide de ceux-ci). Cependant, je pense que je vais vérifier si quelqu'un sait comment éviter facilement les regexes ici. Je n'ai pas beaucoup d'expérience avec le SAX ou autres de l'analyse, si, mais je suis prêt à apprendre.
Je suis impatient d'être montré comment c'est fait rapidement, sans regexes en Python. Merci pour votre aide!
source d'informationauteur Felix Dombek
Vous devez vous connecter pour publier un commentaire.
Mon bien-aimé SD Chargeurs chapeau est hors de vous si vous pensez qu'une regex est plus facile que cela:
De sortie:
Si votre attraction pour une regex est laconique, voici un tout aussi incompréhensible peu de compréhension de liste pour créer une structure de données:
Qui crée une liste de tuples de la enfants XML de
<file>
dans l'ordre du document:Avec un peu plus de lignes et un peu plus de pensée, de toute évidence, vous pouvez créer une structure de données que vous voulez à partir d'un document XML avec ElementTree. Il fait partie de la distribution Python.
Modifier
Code de golf est!
Si votre XML uniquement a la
file
section, vous pouvez choisir votre golf. Si votre XML a d'autres marqueurs, d'autres articles, vous devez tenir compte de la section, les enfants sont dans et vous aurez besoin d'utiliserfindall
Il y a un tutoriel sur ElementTree à Effbot.org
Utilisation ElementTree. Vous n'avez pas besoin/envie de coucher avec un parse-seulement gadget comme
pyexpat
... tu ferais en fin de compte n'en ré-inventant ElementTree partiellement et mal.Une autre possibilité est lxml qui est un logiciel tiers qui met en œuvre la ElementTree interface plus plus.
Mise à jour Quelqu'un a commencé à jouer du code de golf; voici mon entrée, ce qui crée réellement la structure de données que vous avez demandé:
Vous voudrez probablement avoir un dict cartographie "de l'attribut" les noms de fonctions de conversion:
J'ai également été à la recherche d'un moyen simple de transformer des données entre des documents XML et Python structures de données, quelque chose de semblable à Golang de la bibliothèque XML qui vous permet de spécifier de manière déclarative comment carte à partir de structures de données XML.
J'ai été incapable de trouver une bibliothèque pour le langage Python, j'ai donc écrit un répondre à mon besoin a appelé declxml déclarative de traitement XML.
Avec declxml, vous créez processeurs qui déclarative de définir la structure de votre document XML. Les transformateurs sont utilisés pour effectuer l'analyse et la sérialisation ainsi que d'un niveau de base de validation.
L'analyse de données XML dans une liste de dictionnaires avec declxml est simple
Qui produit le résultat suivant
Souhaitez analyser les données dans des objets au lieu de les dictionnaires? Vous pouvez le faire aussi bien
Qui produit la sortie
Si vous avez une fonction statique qui convertit un fichier XML de l'Objet, il serait quelque chose comme ceci