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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python中使用PDB库调试程序
Apr 05 Python
Python最基本的输入输出详解
Apr 25 Python
讲解Python中运算符使用时的优先级
May 14 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
利用python画一颗心的方法示例
Jan 31 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
python 用struct模块解决黏包问题
Nov 07 Python
Django数据库迁移常见使用方法
Nov 12 Python
python集合的新增元素方法整理
Dec 07 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截取后台登陆密码的代码
2012/05/05 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
中学门卫岗位职责
2013/12/26 职场文书
机关节能减排实施方案
2014/03/17 职场文书
教师党员承诺书
2014/03/25 职场文书
文明市民先进事迹
2014/05/15 职场文书
亮剑观后感600字
2015/06/05 职场文书
如何书写邀请函?
2019/06/24 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
SpringAop日志找不到方法的处理
2021/06/21 Java/Android