解析使用xml.etree.elementtree 模組,生成使用xml.dom.minidom模組, elementtree比dom快,dom生成簡單且會自動格式化。
<?xml version='1.0' encoding='utf-8'
?>
<
baspools
>
<
bas>
<
basprovider
>0
basprovider
>
<
portal_version
>1
portal_version
>
<
timeout
>111
timeout
>
<
retry
>111
retry
>
<
auth_type
>111
auth_type
>
bas>
<
bas>
<
basprovider
>0
basprovider
>
<
portal_version
>1
portal_version
>
<
timeout
>5000
timeout
>
<
retry
>3
retry
>
<
auth_type
>0
auth_type
>
bas>
baspools
>
解析為dict:
, 1: }
將上述字典再還原xml執行**:
#coding = 'utf-8'
import
time
import
xml.etree.elementtree as et
import
xml.dom.minidom as minidom
start = time.clock() #
記錄處理開始時間;與最後一行一起使用,來判斷輸出執行時間。
defread_xml(in_path):
"""讀取並解析xml檔案
in_path: xml路徑
return: tree
"""tree =et.parse(in_path)
return
tree
defcreat_dict(root):
"""xml生成為dict:,
將tree中個節點新增到list中,將list轉換為字典dict_init
疊加生成多層字典dict_new
"""dict_new ={}
for key, valu in
enumerate(root):
dict_init ={}
list_init =
for item in
valu:
for lists in
list_init:
dict_init[lists[0]] = lists[1]
dict_new[key] =dict_init
return
dict_new
defdict_to_xml(input_dict, root_tag, node_tag):
"""定義根節點root_tag,定義第二層節點node_tag
第三層中將字典中鍵值對對應引數名和值
return: xml的tree結構
"""root_name =et.element(root_tag)
for (k, v) in
input_dict.items():
node_name =et.subelement(root_name, node_tag)
for key, val in
v.items():
key =et.subelement(node_name, key)
key.text =val
return
root_name
defout_xml(root):
"""格式化root轉換為xml檔案
"""rough_string = et.tostring(root, '
utf-8')
reared_content =minidom.parsestring(rough_string)
with open(out_file, 'w+
') as fs:
reared_content.writexml(fs, addindent="
", newl="
\n", encoding="
utf-8")
return
true
if__name__ == '
__main__':
in_files = r"
d:\baspool_read.xml
"out_file = r"
d:\baspool_out.xml
"tree =read_xml(in_files)
node_new = creat_dict(tree.getroot()) #
將xml轉換為dict
root = dict_to_xml(node_new, "
baspools
", "
bas") #
將dict轉換為xml
out_xml(root) #
輸出xml到out_files
end =time.clock()
print("
read: %f s
" % (end - start))
解決 字典無順序導致生成的xml檔案引數位置不固定,對dict_to_xml()函式進行修正:
defdict_to_xml(input_dict,root_tag,node_tag):
"""定義根節點root_tag,定義第二層節點node_tag
第三層中將字典中鍵值對對應引數名和值
return: xml的tree結構
"""root_name =et.element(root_tag)
for (k, v) in
input_dict.items():
node_name =et.subelement(root_name, node_tag)
for (key, val) in sorted(v.items(), key=lambda e:e[0], reverse=true):
key =et.subelement(node_name, key)
key.text =val
return root_name
python xml解析例子
coding utf 8 created on thu apr 16 23 18 27 2015 author shifeng 功能 解析cdr sample.xml檔案,輸出格式為dnorm接收的格式,並將訓練集的 label 寫入到文件中 xml檔案 見csdn資源共享 import codec...
PythonXML檔案解析
sax是一種基於事件驅動的api。利用sax解析xml文件牽涉到兩個部分 解析器和事件處理器。解析器負責讀取xml文件,並向事件處理器傳送事件,如元素開始跟元素結束事件 而事件處理器則負責對事件作出相應,對傳遞的xml資料進行處理。適於處理下面的問題 在python中使用sax方式處理xml要先引入...
python xml生成 python 生成xml
用到這個模組的時候,感覺網上大部分資料比較繁瑣,所以自己寫了個簡單的def 其實最主要掌握以下幾個函式 1.doc xml.dom.minidom.document 生成xml的dom樹物件 2.root doc.createelement root 建立樹節點,可以使根節點或者是子節點 3.chi...