Python替换Xm

2024-04-25 21:04:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件FF\u tuningConfig\u AMPKi.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"/>

我有以下代码:

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

我得到以下信息:

active="true"      <Thresholds>

而不是:

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

Tags: pathinidoslinerootfilenamereplace
1条回答
网友
1楼 · 发布于 2024-04-25 21:04:56

你的问题是line=line.replace(line,String_Replace)。看一下str.replace()的文档

line = line.replace(search,String_Replace)

为了测试您的代码,您可以编写一个单独的脚本,其中只包含似乎失败的部分

# 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)

这使您能够集中精力解决问题,并使修改和测试代码变得简单快捷。一旦你有了这个功能,复制并粘贴到你的工作代码中。如果您的代码的这一部分实际工作,那么您已经消除了它作为错误源,您可以测试其他部分


另外,在尝试替换之前,不需要测试搜索字符串是否在行中。如果搜索字符串不在该行中,str.replace()将返回该行而不进行修改

相关问题 更多 >