2017-02-13 1 views
0

J'essaie d'analyser tous les fichiers XML dans un dossier/sous-dossier donné et de rechercher et remplacer du texte dans ce fichier XML. Tout en excluant le sous-dossier "Archive". Je reçois l'erreur "AttributeError: l'objet 'NoneType' n'a pas d'attribut 'replace'" Je ne sais pas ce qui me manque, mais ma boucle semble mourir une fois qu'elle atteint ElementTree pour ouvrir et analyser le XML.Analyser récursivement tous les fichiers xml et exclure le dossier

for roots, dirs, files in os.walk("C:\test", topdown=True): 
    if 'Archive' in dirs: 
     dirs.remove('Archive') 
    #dirs[:] = [d for d in dirs if 'Archive' not in d] 
    for f in files: 
     if f.endswith('.xml'): 
      try: 
       with open(os.path.join(roots, f), 'r') as xml: 
        tree = ET.parse(xml) 
        root = tree.getroot() 

        for elem in root.getiterator(): 
        try: 
         print (elem.text) 
         elem.text = elem.text.replace('_THUMBNAIL.jpg', '.mxd.jpg') 

        except ET.ParseError: 
         pass 

       tree.write(xml, encoding='utf-8') 
      except FileNotFoundError: 
       pass 

Répondre

0

Je suppose que toutes les balises XML n'ont pas de texte. Vous devez donc utiliser

if elem.text is not None : 
    try: 
     print (elem.text) 
     elem.text = elem.text.replace('_THUMBNAIL.jpg', '.mxd.jpg') 
+0

hmm pas de dés. Il semble sauter tout avec ça. – Infinity8

+0

Pouvez-vous montrer une petite partie de votre fichier XML? Cela semble étrange. – VdF