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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    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 actif
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    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 actif
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    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

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