python第三天 文件的操作习题

文件内容如下:以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 &quot;%r&quot; %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()

 

转载于:https://www.cnblogs.com/zylong1201/p/8005140.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值