[Python] Parser XML à optimiser...
dje-dje
Messages postés
10442
Statut
Modérateur
-
dje-dje Messages postés 10442 Statut Modérateur -
dje-dje Messages postés 10442 Statut Modérateur -
Bonjour,
Je me suis amusé à créer un parser en python, pour un fichier xml que je dois incorporer dans une base access. Pour parser ce fichier de 2 megas, il faut 30 secondes à mon PC. Ma collegue a fait un script PHP qui fait ca en moins de 10 secondes 8-|.
Bien que son PC soit un peu plus rapide (J'ai un athlon 2000, et elle un P4 2,8Ghz) je me dit que je pourrais faire mieux...
D'abord êtes vous d'accord sur le principe? (Que c'est long et que ca peut s'améliorer, surtout que des fichiers de 15 Mo seront traités en moyenne)
Ensuite l'utilisation de la classe HTMLParser est elle un bon choix? Devrais-je utiliser les regexp ou les fonctions string à la place?
Avez-vous besoin de détail? (Schema XML, mon code actuel,...)
a+
dje-dje
PS: je suis sur que mon code n'est pas optimisé(je ne connais pas assez python pour ca:-(( ), mais pour l'instant l'objectif était de "faire un truc qui marche"
a+
dje-dje
Je me suis amusé à créer un parser en python, pour un fichier xml que je dois incorporer dans une base access. Pour parser ce fichier de 2 megas, il faut 30 secondes à mon PC. Ma collegue a fait un script PHP qui fait ca en moins de 10 secondes 8-|.
Bien que son PC soit un peu plus rapide (J'ai un athlon 2000, et elle un P4 2,8Ghz) je me dit que je pourrais faire mieux...
D'abord êtes vous d'accord sur le principe? (Que c'est long et que ca peut s'améliorer, surtout que des fichiers de 15 Mo seront traités en moyenne)
Ensuite l'utilisation de la classe HTMLParser est elle un bon choix? Devrais-je utiliser les regexp ou les fonctions string à la place?
Avez-vous besoin de détail? (Schema XML, mon code actuel,...)
a+
dje-dje
PS: je suis sur que mon code n'est pas optimisé(je ne connais pas assez python pour ca:-(( ), mais pour l'instant l'objectif était de "faire un truc qui marche"
a+
dje-dje
Il y a 10 types de personne dans le monde, ceux qui comprennent le binaire et les autres
A voir également:
- [Python] Parser XML à optimiser...
- Optimiser son pc - Accueil - Utilitaires
- Xml viewer - Télécharger - Édition & Programmation
- Tcp optimiser - Télécharger - Optimisation
- Citizen code python - Accueil - Outils
- Optimiser windows 10 - Guide
2 réponses
Je ne suis pas un spécialiste du parsing XML, mais il existe plusieurs solutions:
- SAX (l'artillerie lourde)
- DOM
- expressions régulières
- classe customisées allégées
Je ne te recommande pas l'utilisation de HTMLParser, qui n'est pas fait du tout pour parser du XML.
SGMLParser pourrait à la limite convenir, mais c'est un peu lourd à manipuler.
Il existe des parseurs XML allégé plus rapide et plus simples à utiliser que SAX.
http://www.xml.com/pub/a/2004/10/13/py-xml.html
Il existe également pyXML, un package qui contient plusieurs parseurs XML (SAX,DOM,Expat,etc.)
http://pyxml.sourceforge.net/
Voir aussi les articles:
http://www.xml.com/pub/q/pyxml
- SAX (l'artillerie lourde)
- DOM
- expressions régulières
- classe customisées allégées
Je ne te recommande pas l'utilisation de HTMLParser, qui n'est pas fait du tout pour parser du XML.
SGMLParser pourrait à la limite convenir, mais c'est un peu lourd à manipuler.
Il existe des parseurs XML allégé plus rapide et plus simples à utiliser que SAX.
http://www.xml.com/pub/a/2004/10/13/py-xml.html
Il existe également pyXML, un package qui contient plusieurs parseurs XML (SAX,DOM,Expat,etc.)
http://pyxml.sourceforge.net/
Voir aussi les articles:
http://www.xml.com/pub/q/pyxml
Et bien encore une fois merci de ton aide, car ce n'est pas la premiere fois que tu me depannes sur Python.
J'ai suivi quelques-uns de tes liens et j'ai choisit d'utiliser SAX, car il semble plus adapté aux travaux sur des gros fichiers d'apres ce que j'ai lu.
De plus, les arguments renvoyés par sax différant légèrement (dictionnaire au lieu de list je crois) m'ont obligé à repenser mon algo, et effectivement je dois economiser des operations puisque le niveau de performance semble meilleur que celui de ma collegue (Niark!)
il ne me reste " plus qu'à " gérer les entités ( { ) et prévoir d'utiliser le parser sur une serie de fichier d'un répertoire...
Au fait, pourquoi appelles-tu SAX l'artillerie lourde?
Encore merci!
a+
dje-dje
J'ai suivi quelques-uns de tes liens et j'ai choisit d'utiliser SAX, car il semble plus adapté aux travaux sur des gros fichiers d'apres ce que j'ai lu.
De plus, les arguments renvoyés par sax différant légèrement (dictionnaire au lieu de list je crois) m'ont obligé à repenser mon algo, et effectivement je dois economiser des operations puisque le niveau de performance semble meilleur que celui de ma collegue (Niark!)
il ne me reste " plus qu'à " gérer les entités ( { ) et prévoir d'utiliser le parser sur une serie de fichier d'un répertoire...
Au fait, pourquoi appelles-tu SAX l'artillerie lourde?
Encore merci!
a+
dje-dje
Il y a 10 types de personne dans le monde, ceux qui comprennent le binaire et les autres
Au fait, pourquoi appelles-tu SAX l'artillerie lourde?
Parceque bien souvent pour une tâche très précise, on va beaucoup plus vite (aussi bien en développement qu'en temps de traitement) avec des modules "allégés".
Ces modules ne supportent pas toutes les options du XML, mais ils sont généralement plus rapide et plus simples à utiliser.
Parceque bien souvent pour une tâche très précise, on va beaucoup plus vite (aussi bien en développement qu'en temps de traitement) avec des modules "allégés".
Ces modules ne supportent pas toutes les options du XML, mais ils sont généralement plus rapide et plus simples à utiliser.