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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
python抽取指定url页面的title方法
May 11 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python: 传递列表副本方式
Dec 19 Python
python3.7通过thrift操作hbase的示例代码
Jan 14 Python
详解python常用命令行选项与环境变量
Feb 20 Python
关于python中的xpath解析定位
Mar 06 Python
Python排序函数的使用方法详解
Dec 11 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
Cakephp 执行主要流程
2010/03/24 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
定义select的边框颜色
2008/04/28 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python 实现微信防撤回功能
2019/04/29 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
推荐信怎么写
2014/05/09 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
李白故里导游词
2015/02/12 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA