本文實例講述了Python3.5編程實現修改IIS WEB.CONFIG的方法。分享給大家供大家參考,具體如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
#!/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文件 # 找到父節點 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程序設計有所幫助。
原文鏈接:http://www.cnblogs.com/IPYQ/p/6281440.html