Python3.5编程实现修改IIS WEB.CONFIG的方法示例


Posted in Python onAugust 18, 2017

本文实例讲述了Python3.5编程实现修改IIS WEB.CONFIG的方法。分享给大家供大家参考,具体如下:

#!/usr/bin/env python3.5
# -*- coding:utf8 -*-
from xml.etree.ElementTree import ElementTree,Element
def read_xml(in_path):
  """
  读取并解析XML文件
  :param in_path: XML路径
  :return:
  """
  tree = ElementTree()
  tree.parse(in_path)
  return tree
def write_xml(tree,out_path):
  """
  将XML文件写出
  :param tree:
  :param out_path:写出路径
  :return:
  """
  tree.write(out_path,encoding="utf-8",xml_declaration=True)
def if_match(node,kv_map):
  """
  判断某个节点是否包含所有传入参数属性
  :param node: 节点
  :param kv_map: 属性及属性值组成的MAP
  :return:
  """
  for key in kv_map:
    if node.get(key) != kv_map.get(key):
      return False
    return True
def find_nodes(tree,path):
  """
  查找某个路径匹配的所有节点
  :param tree:XML树
  :param path:节点路径
  :return:
  """
  return tree.findall(path)
def get_node_by_keyvalue(nodelist,kv_map):
  """
  根据属性及属性值定位符合的节点,返回节点
  :param nodelist: 节点列表
  :param kv_map: 匹配属性及属性值MAP
  :return:
  """
  result_nodes =[]
  for node in nodelist:
    if if_match(node,kv_map):
      result_nodes.append(node)
  return result_nodes
def change_node_properties(nodelist,kv_map,is_delete =False):
  """
  修改、增加、删除 节点的属性及属性值
  :param nodelist: 节点列表
  :param kv_map: 属性及属性值MAP
  :param is_delete:
  :return:
  """
  for node in nodelist:
    for key in kv_map:
      if is_delete:
        if key in node.attrib:
          del node.attrib[key]
      else:
        node.set(key,kv_map.get(key))
def change_node_text(nodelist,text,is_add=False,is_delete=False):
  """
  改变、增加、删除一个节点的文本
  :param nodelist: 节点列表
  :param text: 更新后的文本
  :param is_add:
  :param is_delete:
  :return:
  """
  for node in nodelist:
    if is_add:
      node.text += text
    elif is_delete:
      node.text = ""
    else:
      node.text = text
def create_node(tag,property_map,content):
  """
  新造一个节点
  :param tag:节点标签
  :param property_map:属性及属性值MAP
  :param content: 节点闭合标签里的文件内容
  :return:新节点
  """
  element =Element(tag,property_map)
  element.text =content
  return element
def add_child_node(nodelist,element):
  """
  给一个节点添加子节点
  :param nodelist: 节点列表
  :param element: 子节点
  :return:
  """
  for node in nodelist:
    node.append(element)
def del_node_by_tagkeyvalue(nodelist,tag,kv_map):
  """
  同过属性及属性值定位一个节点,并删除之
  :param nodelist: 父节点列表
  :param tag: 子节点标签
  :param kv_map: 属性及属性值列表
  :return:
  """
  for parent_node in nodelist:
    childree = parent_node.getchildren()
    for child in childree:
      if child.tag == tag and if_match(child,kv_map):
        parent_node.remove(child)
def config_file_rw(file):
  """
  对XML配置文件进行修复以满足适应IIS
  :param file: 目标文件
  :return:
  """
  import re
  x =re.compile("<ns0:")
  y = re.compile("</ns0:")
  z = re.compile("xmlns:ns0")
  with open(file,"r",encoding="utf-8") as f:
    txt = f.readlines()
    for i, line in enumerate(txt):
      if x.search(line):
        txt[i] = x.sub("<", line)
      elif y.search(line):
        txt[i] = y.sub("</", line)
      elif z.search(line):
        txt[i] = "<configuration>\n"
  with open(file,"w",encoding="utf-8") as fw:
    fw.writelines(txt)
    fw.close()
    print("配置文件%s,修改成功!"%file)
if __name__ == "__main__":
  #1. 读取xml文件
  tree = read_xml("web.config")
  # 找到父节点
  print()
  nodes = find_nodes(tree, "connectionStrings/")
  # 通过属性准确定位子节点
  result_nodes =(get_node_by_keyvalue(nodes,{"name":"strConnection_HuaChenShiYou"}))
  # 修改节点属性
  change_node_properties(result_nodes,{"connectionString":"UwreW/Obe4fGk2CFW4uE6iZWaPAVn0nePXIrtNRApxEGLv6SHetFg6b%2BMLFhg9myAr2EI2b3FgHtKHOKVcjz5DPoV8%2BMAvpzqlEZP2JZqrVEofP3AulFUZbTLfmndYFRqIytlxSCeHr2A79EWHH9/xg0eSgsdvWd"})
  # #2. 属性修改
  # #A. 找到父节点
  # nodes = find_nodes(tree, "processers/processer")
  # #B. 通过属性准确定位子节点
  # result_nodes = get_node_by_keyvalue(nodes, {"name":"BProcesser"})
  # #C. 修改节点属性
  # change_node_properties(result_nodes, {"age": "1"})
  # #D. 删除节点属性
  # change_node_properties(result_nodes, {"value":""}, True)
  #
  # #3. 节点修改
  # #A.新建节点
  # a = create_node("person", {"age":"15","money":"200000"}, "this is the firest content")
  # #B.插入到父节点之下
  # add_child_node(result_nodes, a)
  #
  # #4. 删除节点
  #  #定位父节点
  # del_parent_nodes = find_nodes(tree, "processers/services/service")
  #  #准确定位子节点并删除之
  # target_del_node = del_node_by_tagkeyvalue(del_parent_nodes, "chain", {"sequency" : "chain1"})
  #
  # #5. 修改节点文本
  #  #定位节点
  # text_nodes = get_node_by_keyvalue(find_nodes(tree, "processers/services/service/chain"), {"sequency":"chain3"})
  # change_node_text(text_nodes, "new text")
  #
  # #6. 输出到结果文件
  write_xml(tree, "new.config")
  config_file_rw("new.config")

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python创建和使用字典实例详解
Nov 01 Python
python数据结构之二叉树的遍历实例
Apr 29 Python
Python中bisect的用法
Sep 23 Python
Python的Urllib库的基本使用教程
Apr 30 Python
python自定义解析简单xml格式文件的方法
May 11 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python列表的切片实例讲解
Aug 20 Python
浅析python标准库中的glob
Mar 13 Python
Python3实现建造者模式的示例代码
Jun 28 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 #Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 #Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 #Python
Python绑定方法与非绑定方法详解
Aug 18 #Python
python字典DICT类型合并详解
Aug 17 #Python
Python时间的精准正则匹配方法分析
Aug 17 #Python
Python实现运行其他程序的四种方式实例分析
Aug 17 #Python
You might like
php采集时被封ip的解决方法
2010/08/29 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
js 文件引入实现代码
2010/04/23 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
Python3实现配置文件差异对比脚本
2019/11/18 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
回门宴新郎答谢词
2014/01/12 职场文书
员工薪酬福利制度
2014/01/17 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
简历自荐信范文
2015/03/09 职场文书
销售员自我评价
2015/03/11 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
新闻报道稿范文
2015/07/23 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
如何用PHP实现多线程编程
2021/05/26 PHP
Python实现仓库管理系统
2022/05/30 Python
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers