[OSM-talk-fr] Y-a-t-il un expert Python dans la salle ?

Pieren pieren3 at gmail.com
Mer 8 Juil 15:35:03 UTC 2009


Bonsoir,

Je teste actuellement le script Python bulk_upload.py pour l'import
Corine Land Cover. Je l'ai légèrement modifié pour qu'il ajoute les
éléments dans l'ordre de lecture du parser et pas dans l'ordre des
types d'éléments comme le fait le script original (tous les nodes puis
ways puis relations):

Le script se trouve ici:
http://svn.openstreetmap.org/applications/utils/import/bulk_upload_06/

Malheureusement, j'ai l'impression que ma version tente de charger le
document en entier en mémoire pour le parsing XML, ce qui n'est pas
souhaité en particulier lorsque ce document fait 1.4 GB.
J'aimerais savoir si quelqu'un qui connait mieux Python que moi
pourrait me donner un coup de main sur ce coup-là. L'idée serait
bien-sûr de parser le document XML sans avoir à tout charger en
mémoire.

Pieren

PS: le document XML utilisé pour les tests contient des erreurs mais
le parser ne soulève aucun message d'erreur mais semble consommer une
quantité mémoire anormale. J'en conclu que c'est un problème de
méthode et non un bug du parser.
Le parser du script original est :
xml.etree.cElementTree
et le parser est appelé ainsi:
osmData=ET.parse(options.infile) //options.infile =fichier xml
puis le script original fait une boucle comme suit:
for type in ('node','way','relation'):
    for elem in osmData.getiterator(type):
:

que j'ai modifié en:
for elem in osmData.getiterator():
    if elem.tag=='node' or elem.tag=='way' or elem.tag=='relation':
:

Est-ce correct?  Est-ce que le parser xml.etree.cElementTree charge
tout le document en mémoire ? Peut-on faire autrement ?




Plus d'informations sur la liste de diffusion Talk-fr