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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
python爬虫之百度API调用方法
Jun 11 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
基于数据归一化以及Python实现方式
Jul 11 Python
详解Python3中ceil()函数用法
Feb 19 Python
详解Python的三种可变参数
May 08 Python
Mac安装python3的方法步骤
Aug 09 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python实现疫情地图可视化
Feb 05 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
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
详解vue 数据传递的方法
2018/04/19 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
使用Python写一个小游戏
2018/04/02 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python hashlib模块用法实例分析
2018/06/12 Python
Python3 log10()函数简单用法
2019/02/19 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
班会关于环保演讲稿
2013/12/29 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
个人存款证明书
2014/10/18 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript