python3.5修改IISWEB.CONFIG的相關方法
python3.5修改IISWEB.CONFIG的修改相關方法
閱讀次數:187 次 來源:admin 發布時間:#!/usr/bin/env python3.5# -*- coding:utf8 -*-from xml.etree.ElementTree import ElementTree,Elementdef read_xml(in_path): """ 讀取并解析XML文件 :param in_path: XML路徑 :return: """ tree = ElementTree() tree.parse(in_path) return treedef 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 Truedef 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_nodesdef 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 = textdef create_node(tag,property_map,content): """ 新造一個節點 :param tag:節點標簽 :param property_map:屬性及屬性值MAP :param content: 節點閉合標簽里的文件內容 :return:新節點 """ element =Element(tag,property_map) element.text =content return elementdef 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")
未經允許不得轉載:>貴州網站建設公司 » python3.5修改IISWEB.CONFIG的相關方法