2017-09-10 1 views
-2

Ich habe Datei, FF_tuningConfig_AMPKi.xml enthält Datensätze wie:Python Ersatz für 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"/> 

Ich habe den folgenden Code:

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"') 

Ich erhalte die folgenden:

active="true"  <Thresholds> 

Anstelle von:

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

'Ich bekomme ...' - was heißt das? Ihre Funktion gibt nichts zurück. Ist es das Drucken? – wwii

+0

@wwii Vermutlich ist das, was OP in ihrer XML-Datei bekommt – stybl

+0

Ihr Problem könnte reduziert werden - öffnen Sie dann eine Datei lesen; Ersetze Zeichenfolgen im resultierenden Inhalt; schreibe den geänderten Inhalt in eine Datei. Vermutlich besteht das Problem darin, den Inhalt zu modifizieren. Wenn Sie Fragen stellen, wenn Sie uns eine [mcve] zur Verfügung stellen, hilft dies, unsere Bemühungen zu konzentrieren. Manchmal, wenn Sie ein mcve für uns konstruieren, hilft es Ihnen, das Problem zu finden. – wwii

Antwort

0

Ihr Problem ist mit line=line.replace(line,String_Replace). Werfen Sie einen Blick in die Dokumentation für str.replace()

line = line.replace(search,String_Replace) 

Code zu testen, könnten Sie haben ein separates Skript nur mit dem Teil geschrieben, die andernfalls zu sein schien.

# test input 
s = '''<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"/>''' 

lines = s.split('\n') 

# parameters 
search, String_Replace = '<KiConfig active="%{active}"','<KiConfig active="true"' 

# Then the part of your code that seems to be failing 
for line in lines: 
    if search in line: 
     line = line.replace(line, String_Replace) 
    print(line) 

Damit können Sie sich auf das Problem konzentrieren und es einfach und schnell zu ändern, dann testen Sie Ihren Code. Sobald diese Funktionalität funktioniert, kopieren Sie sie und fügen Sie sie in Ihren Arbeitscode ein. Wenn dieser Teil Ihres Codes tatsächlich funktioniert, haben Sie ihn als Fehlerquelle eliminiert und Sie können andere Teile testen.


Nebenbei, keine Notwendigkeit zu testen, ob Ihr Suchbegriff in der Zeile vor dem Versuch zu ersetzen ist. Wenn sich die Suchzeichenfolge nicht in der Zeile befindet, gibt str.replace() die Zeile ohne Änderung zurück.