[Python] Parser XML à optimiser...

Fermé
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 - 13 oct. 2004 à 17:13
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 - 21 oct. 2004 à 01:01
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

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres 
A voir également:

2 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
14 oct. 2004 à 12:16
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
1
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
19 oct. 2004 à 22:55
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


Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres 
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
19 oct. 2004 à 23:20
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.
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
21 oct. 2004 à 01:01
Merci pour cet eclaircissement.
Je regarderai de ce côté la aussi, au moins par simple curiosité...

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres 
0