IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

lxml sur python


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut lxml sur python
    Bonjour,
    je voudrais remplacer des termes dans un fichier xml. J'ai le module lxml pour python. voici le fichier xml à modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?xml version="1.0"?>
    <WLANProfile>
    	<name>nom</name>
    	<SSIDConfig>
    		<SSID>
    			<hex>hexa</hex>
    			<name>nom</name>
    		</SSID>
    	</SSIDConfig>
    	<connectionType>ESS</connectionType>
    	<connectionMode>auto</connectionMode>
    	<MSM>
    		<security>
    			<authEncryption>
    				<authentication>WPAPSK</authentication>
    				<encryption>AES</encryption>
    				<useOneX>false</useOneX>
    			</authEncryption>
    			<sharedKey>
    				<keyType>passPhrase</keyType>
    				<protected>false</protected>
    				<keyMaterial>mot_de_passe</keyMaterial>
    			</sharedKey>
    		</security>
    	</MSM>
    </WLANProfile>
    je voudrais remplacer le terme hexa grâce à un script python.
    J'ai fait des recherches et j'ai lu qu'il fallait utiliser la fonction replace. Cependant je ne comprend pas comment l'utiliser, à chaque essai, je recois des erreurs

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    Citation Envoyé par stinng Voir le message
    J'ai fait des recherches et j'ai lu qu'il fallait utiliser la fonction replace. Cependant je ne comprend pas comment l'utiliser, à chaque essai, je recois des erreurs
    Si vous ne montrez pas ce que vous faites et les erreurs rencontrées: pas facile de vous aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> data = '''<SSID>
    ...                     <hex>hexa</hex>
    ...                     <name>nom</name>
    ...             </SSID>'''
    >>>
    >>> data.replace('hexa', '*FOO*')
    '<SSID>\n\t\t\t<hex>*FOO*</hex>\n\t\t\t<name>nom</name>\n\t\t</SSID>'
    >>>
    Mais vous vouliez peut être remplacer le texte associé à l'élément hex plutôt que remplacer "hexa" par autre chose...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    désolé de ne pas avoir donné plus de détail, je n'avais pas compris comment marché la fonction. maintenant c'est bon mais j'aurais une autre question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <WLANProfile>
    	<name>nom</name>
    	<SSIDConfig>
    		<SSID>
    			<hex>hexa</hex>
    			<name>nom</name>
    		</SSID>
    	</SSIDConfig>
    	<connectionType>ESS</connectionType>
    	<connectionMode>auto</connectionMode>
    	<MSM>
    		<security>
    			<authEncryption>
    				<authentication>secure</authentication>
    				<encryption>AES</encryption>
    				<useOneX>false</useOneX>
    			</authEncryption>
    			<sharedKey>
    				<keyType>passPhrase</keyType>
    				<protected>false</protected>
    				<keyMaterial>mot_de_passe</keyMaterial>
    			</sharedKey>
    		</security>
    	</MSM>
    </WLANProfile>
    Dans ce code, j'aimerais que le 1er <WLANProfile> devienne <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">, mais pas le second. Cela deviendrait donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    	<name>nom</name>
    	<SSIDConfig>
    		<SSID>
    			<hex>hexa</hex>
    			<name>nom</name>
    		</SSID>
    	</SSIDConfig>
    	<connectionType>ESS</connectionType>
    	<connectionMode>auto</connectionMode>
    	<MSM>
    		<security>
    			<authEncryption>
    				<authentication>secure</authentication>
    				<encryption>AES</encryption>
    				<useOneX>false</useOneX>
    			</authEncryption>
    			<sharedKey>
    				<keyType>passPhrase</keyType>
    				<protected>false</protected>
    				<keyMaterial>mot_de_passe</keyMaterial>
    			</sharedKey>
    		</security>
    	</MSM>
    </WLANProfile>
    Je n'ai aucune idée de comment réaliser cela, mes recherches n'ont pas été fructueuse.
    merci de me faire partagé vos idées si vous en avez

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par stinng Voir le message
    Je n'ai aucune idée de comment réaliser cela, mes recherches n'ont pas été fructueuse.
    merci de me faire partagé vos idées si vous en avez
    Si vous avez compris comment fonctionne .replace, pourquoi ne pas remplacer la chaine "<WLANProfile>" ?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    le code vient du fichier Wi-Fi.xml;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from lxml import etree   
    xml_file = etree.parse("Wi-Fi.xml")
    xml_file.replace('<WLANProfile>', '<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">')
    Avec ce code, j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'lxml.etree._ElementTree' object has no attribute 'replace'
    je ne comprend pas pourquoi.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par stinng Voir le message
    Avec ce code, j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'lxml.etree._ElementTree' object has no attribute 'replace'
    je ne comprend pas pourquoi.
    Difficile d'utiliser un bibliothèque comme lxml sans comprendre des messages d'erreur aussi simples. Vous pourriez simplement écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xml_file = open("Wi-Fi.xml").read()
    xml_file.replace('<WLANProfile>', '<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">')
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    merci de ton aide, je ne me sers pas très bien de lxml parce que je viens de commencer à m'en servir et que je n'apprends pas une fonction juste pour la connaitre mais car j'en besoin. Je choisis un objectif et je cherche ensuite tout les moyens pour l'atteindre.
    merci pour ton code, il n'affiche aucun message d'erreur mais le fichier n'est pas modifier pour autant. Peux-tu m'indiquer comment faire une dernière fois?
    merci encore pour ton aide

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    Citation Envoyé par stinng Voir le message
    merci pour ton code, il n'affiche aucun message d'erreur mais le fichier n'est pas modifier pour autant. Peux-tu m'indiquer comment faire une dernière fois?
    Ce code ne modifie qu'une chaine de caractère. Si vous voulez la sauvegarder dans un fichier, il faut apprendre à jouer avec open(..., "w") et écrire dans le fichier...

    Citation Envoyé par stinng Voir le message
    merci de ton aide, je ne me sers pas très bien de lxml parce que je viens de commencer à m'en servir et que je n'apprends pas une fonction juste pour la connaitre mais car j'en besoin. Je choisis un objectif et je cherche ensuite tout les moyens pour l'atteindre.
    Pour l'instant, vous n'avez pas besoin de lxml pour quoi que ce soit mais plutôt de connaître les bases du langage et de la programmation. Ouvrir un tuto et l'étudier est le moyen pour arriver à maîtriser ces bases.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    d'accord, merci pour votre aide, je vais me renseigner sur .open

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Auriez-vous un bon tutoriel python pour reprendre le lxml à la base à me conseiller?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par stinng Voir le message
    Auriez-vous un bon tutoriel pour reprendre le lxml à la base à me conseiller?
    Le tutoriel qui est livré avec la documentation (que vous êtes supposé avoir parcouru histoire de vous donner les moyens de l'utiliser ) est un bon point de départ.

    Ceci dit, depuis la version 2.7 les possibilités de la bibliothèque xml inclus dans python en standard (xml.etree) sont largement suffisantes. La documentation indique aussi pas mal de tutoriels.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. acoustique, musique sur Python
    Par Papou_28 dans le forum Programmation multimédia/Jeux
    Réponses: 7
    Dernier message: 25/04/2007, 08h12
  2. Application reseau de neurone sur python!
    Par tnouss dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 15/04/2007, 20h18
  3. Boucles sur python
    Par Spitfire378 dans le forum Général Python
    Réponses: 10
    Dernier message: 08/04/2007, 20h46
  4. Comment obtenir une adresse mac sur python
    Par Wael Maaoui dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/02/2007, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo