文件内容如下:以tomcat的server.xml文件为例
1.查找 Server下有多少个<Listener>节点,并打印出来
2.在文件我末尾增加一个
<Service>
<Host name="127.0.0.1" appBase="java"
unpackWARs="false" autoDeploy="false">
</Service>,要求这个service 在server里面
3.修改,讲增加的那个service里面的
unpackWARs="false" autoDeploy="false" 改为
unpackWARs="true" autoDeploy="true"
4.删除自己增加的那部分内容
<?xml version='1.0' encoding='utf-8'?> <Server port="8085" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8099" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8089" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/> </Host> </Engine> </Service> </Server>
# Author:zylong # 1.查找 Server下有多少个<Listener>节点,并打印出来 # # 2.在文件我末尾增加一个 # # # # name="127.0.0.1" appBase="java" unpackWARs="false" autoDeploy="false" # 在</server>上里面 # #查找<Listener> def find_content(): findContent = [] with open("server","r",encoding="utf-8") as f: for line in f: if "<Listener" in line: findContent.append(line) return findContent #fi = find_content() #print(len(fi),fi) # print('<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>'.index("<Listener")) #增加 Host name="127.0.0.1" appBase="java" unpackWARs="false" autoDeploy="false" content = { "name":"127.0.0.1", "appBase":"java", "unpackWARs":"false", "autoDeploy":"false" } #需要将字典的值转为字符串,并且按格式拼接起来 def add_content(**kvavgs): #处理传过来的字典 content = str(kvavgs).replace(":","=").replace("'",'').strip("{").strip("}").replace(",",'') with open("server.bak", "wb") as w ,\ open("server","r",encoding="utf-8") as f: for line in f: if '</Server>' in line: line = content+"\n" + line w.write(line.encode("utf-8")) w.write(kvavgs.__str__().encode("utf-8")) # add_content(name="127.0.0.1", # appBase="java", # unpackWARs="false", # autoDeploy="false") # {'name': '127.0.0.1', 'appBase': 'java', 'unpackWARs': 'false', 'autoDeploy': 'false'} 改为{name= 127.0.0.1 appBase= java unpackWARs= true autoDeploy= true} def update_content(): with open("server.bak1","w") as w,\ open("server.bak","rb") as f: #不破坏源文件,将修改的内容保存到server.bak1中 #可以直接使用字符串替换(这里练习字典),所以将获取到的内容先转字典,用字典操作 #这里是以字节形式打开的文件 for line in f: line = line.decode("utf-8") if line.startswith("{'name'") : kvavgs = eval(line) kvavgs["unpackWARs"] = "true" kvavgs["autoDeploy"] = "true" #这里是用kvavgs.__str__() 转字符串方法,与 __str__区分开, __str__是内存地址 line = kvavgs.__str__() w.write(line) # update_content() #删除最后一行的字典 def del_content(): lines = [] with open("server.bak1","r") as r: #将类容全部读取到缓存中 for line in r: if line.startswith("{'name'"): pass else: lines.append(line) with open("server.bak1", "w") as w: w.writelines(lines) del_content()