2017-09-10 1 views
-2

Je fichier, FF_tuningConfig_AMPKi.xml, contient des dossiers tels que:remplacement de python xml

<KiConfig active="%{active}" id="AMP_RET_W_LIN_SUSPICIOUS_MULTIPLE_LOGIN_IN_SHORT_PERIOD$KiConfig"/> 
<KiConfig active="%{active}" id="AMP_RET_W_LIN_UNUSUAL_SESSION_HOUR_OF_DAY$KiConfig"/> 

Je le code suivant:

def replace_content(path,se,search,String_Replace): 
    for root, dirs, files in os.walk(path): 
     for filename in files: 
      if((se in filename)): 
       file=open(os.path.join(root, filename),'r') 
       lines = file.readlines() 
       file=open(os.path.join(root, filename),'w') 

       for line in lines: 
        if search in line: 
        #print "found="+line 
         words=line.split('=') 
        # print words 
        # print "line=" + words[0] +"="+ "8\n" 
         line=line.replace(line,String_Replace) 
        #print "after="+line 
        file.write(line) 
       file.close() 
       print (os.path.join(root,filename) + " was replaced") 

replace_content(Path,'FF_tuningConfig_AMPKi.xml','<KiConfig active="%{active}"','<KiConfig active="true"') 

Je reçois le ci-dessous:

active="true"  <Thresholds> 

Au lieu de:

<KiConfig active="true" id="AMP_RET_W_LIN_UNUSUAL_SESSION_HOUR_OF_DAY$KiConfig"/> 
+0

'Je reçois ...' - qu'est-ce que cela signifie? Votre fonction ne retourne rien. Est-ce ce qu'il imprime? – wwii

+0

@wwii Probablement c'est ce que l'OP obtient dans leur fichier XML – stybl

+0

Votre problème pourrait être réduit à - ouvrir puis lire un fichier; remplacer les chaînes dans le contenu résultant; écrire le contenu modifié dans un fichier. Vraisemblablement, le problème est avec la modification du contenu. Lorsque vous posez des questions, si vous nous fournissez un [mcve], cela aide à concentrer nos efforts. Parfois, lorsque vous construisez un mcve pour nous, cela vous aide à trouver le problème. – wwii

Répondre

0

Votre problème est avec line=line.replace(line,String_Replace). Jetez un oeil à la documentation str.replace()

line = line.replace(search,String_Replace) 

Pour tester votre code, vous auriez pu écrire un script séparé avec seulement la partie qui semblait échouer. Cela vous permet de vous concentrer sur le problème et de le modifier facilement et rapidement, puis de tester votre code. Une fois cette fonctionnalité activée, copiez-la et collez-la dans votre code de travail. Si cette partie de votre code fonctionne, alors vous l'avez éliminé comme source d'erreurs et vous pouvez tester d'autres parties. En outre, inutile de tester si votre chaîne de recherche est dans la ligne avant d'essayer de remplacer. Si la chaîne de recherche n'est pas dans la ligne, str.replace() retournera la ligne sans modification.