Enlever un caractère spéciaux dans un fichier xml en python

Résolu/Fermé
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 29 nov. 2019 à 09:14
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 2 déc. 2019 à 15:27
Bonjour,
J'ai un fichier xml qui contient un caractère spéciaux que j'aimerais supprimer, j'ai trouvé comment détécter le caractère spéciaux mais je ne sais pas comment le supprimer et vous demande votre aide s'il vous plaît.
Voici mon code python:

list_noeud_parent = ['Parent']
            for noeudParent in list_noeud_parent:
                if self.root.find(noeudParent) is not None:
                    for child in self.root.findall(noeudParent):
                        tagSubElement = ["enfant1","enfant2"]
                        for tag in tagSubElement:
                            if child.find(tag) is not None:
                                if '@' in child.find(tag).text:
                                    print("Caractere speciaux trouvé: {}".format(child.find(tag).text))



Voici mon fichier xml:

<?xml version='1.0' encoding='iso-8859-1'?>
<Data>
  <Parent>
    <enfant1>Jacques@</enfant2>
   <enfant2>Paul@</enfant2>
    <enfant3>Paul@ Edouard</enfant2>
</Parent>
</Data>


J'aimerais donc comme résultat

Jacques@ devient Jacques
Paul@ devient Paul
Paul@ Edouard devient Paul Edouard

Cordialement,
A voir également:

2 réponses

Bonjour,

Supprimer un caractère d'une fin de chaine se fait avec str.rstrip

>>> 'Jacques@'.rstrip('@')
'Jacques'


Il reste plus qu'à changer le texte du node xml et d'enregistrer ton fichier modifications faites.
1
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
30 nov. 2019 à 11:20
Merci ca marche très bien sauf que j'ai du mal à adapté le rstrip avec mon code pouvez vous m'aider?
j'ai fait quelque modification mais le résultat est un peu bizhare, en fait seul l'enfant 2 qui contient le virgule seul change mais le 1er enfant et la troisième enfant reste intacte .


for noeudParent in list_noeud_parent:
                if self.root.find(noeudParent) is not None:
                    for child in self.root.findall(noeudParent):
                        tagSubElement = ["enfant1","enfant2"]
                        for tag in tagSubElement:
                            if child.find(tag) is not None:
                                if '@' in child.find(tag).text:
                                    print("Caractere speciaux trouvé: {}".format(child.find(tag).text))

tree=ET.parse("monfichier.xml")
                                    root=tree.getroot()
                                    elems=root.findall(".//enfant1")
                                    for elem in elems:
                                        elems.text=child.find(tag).text.rstrip(',')
                        tree.write('nouveau_fichier.xml', encoding="UTF-8",xml_declaration=True)


Pouvez vous m'aider à rectifié mon code? merci encore!
0
Bonjour,

En effet, j'avais mal lu, je n'avais pas vu que le @ pouvait être dans le milieu de la chaine, alors str.replace est plus que suffisant pour peu que tous les @ de la chaine doivent être supprimés (s'il y a dans le tas des adresses mails, il faudra utiliser re.sub avec le motif qui va bien).

import xml.etree.ElementTree as ET

xml = '''<?xml version='1.0' encoding='iso-8859-1'?>
<Data>
    <Parent>
        <enfant1>Jacques@</enfant1>
        <enfant2>Paul@</enfant2>
        <enfant3>Paul@ Edouard</enfant3>
    </Parent>
</Data>'''

data = ET.fromstring(xml)
for enfant in data.find('Parent'):
    text = enfant.text.replace('@', '')
    enfant.text = text
    
print(ET.tostring(data, encoding='unicode'))
1
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
2 déc. 2019 à 15:27
Ça marche très bien! je vous remercie! votre aide est vraiment précieux!
0