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下的XSLT API进行web开发的简单教程
Apr 15 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
Python3实现的反转单链表算法示例
Mar 08 Python
Opencv实现抠图背景图替换功能
May 21 Python
python 读取修改pcap包的例子
Jul 23 Python
Python之指数与E记法的区别详解
Nov 21 Python
通过python检测字符串的字母
Feb 18 Python
Python实现代码块儿折叠
Apr 15 Python
使用python实现CGI环境搭建过程解析
Apr 28 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 file_get_contents取文件中数组元素的方法
2017/04/01 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
JS 控制非法字符的输入代码
2009/12/04 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python实现flappy bird小游戏
2018/12/24 Python
通过实例了解python property属性
2019/11/01 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
python3实现飞机大战
2020/11/29 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
奥巴马就职演讲稿
2014/05/15 职场文书
绿色环保标语
2014/06/12 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
利用python进行数据加载
2021/06/20 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
Nginx速查手册及常见问题
2022/04/07 Servers