Python寫xml文件


  在上一篇 使用selenium找出外賣點餐次數最多的10個顧客 中,抓取信息后只輸出了點餐次數TOPN的顧客,其實可以把信息保存到本地,便於做更多的統計。

  為了便於后續的讀取處理,這里就將信息保存在xml文件中,想到得到的文件如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <orderlist>
 3     <order>
 4         <customer>姓名1</customer>
 5         <phone>電話1</phone>
 6         <address>地址1</address>
 7         <count>點餐次數1</count>
 8     </order>
 9     <order>
10         <customer>姓名2</customer>
11         <phone>電話2</phone>
12         <address>地址2</address>
13         <count>點餐次數2</count>
14     </order>
15 </orderlist>

  Python寫xml比較簡單,直接使用minidom即可。

  思路也比較簡單,因為dom文檔就是一棵樹,每一個標簽都是一個節點,包括文本內容也是節點,因此從根節點開始,把節點一級一級的插入即可。

  在上一篇中已經將抓取的信息存入了字典orderDict中,這里我們直接在類Order中添加一個方法,將orderDict里面的每一項信息插入DOM樹,然后再寫入本地xml文件。

  由於比較簡單,直接給出代碼:

  

 1     from xml.dom.minidom import Document
 2     # 將self.orderDict中的信息寫入本地xml文件,參數filename是xml文件名
 3     def writeInfoToXml(self, filename):
 4         # 創建dom文檔
 5         doc = Document()
 6 
 7         # 創建根節點
 8         orderlist = doc.createElement('orderlist')
 9         # 根節點插入dom樹
10         doc.appendChild(orderlist)
11 
12         # 依次將orderDict中的每一組元素提取出來,創建對應節點並插入dom樹
13         for (k, v) in self.orderDict.iteritems():
14             # 分離出姓名,電話,地址,點餐次數
15             (name, tel, addr, cnt) = (v[0], k, v[1], v[2])
16 
17             # 每一組信息先創建節點<order>,然后插入到父節點<orderlist>下
18             order = doc.createElement('order')
19             orderlist.appendChild(order)
20 
21             # 將姓名插入<order>中
22             # 創建節點<customer>
23             customer = doc.createElement('customer')
24             # 創建<customer>下的文本節點
25             customer_text = doc.createTextNode(name)
26             # 將文本節點插入到<customer>下
27             customer.appendChild(customer_text)
28             # 將<customer>插入到父節點<order>下
29             order.appendChild(customer)
30 
31             # 將電話插入<order>中,處理同上
32             phone = doc.createElement('phone')
33             phone_text = doc.createTextNode(tel)
34             phone.appendChild(phone_text)
35             order.appendChild(phone)
36 
37             # 將地址插入<order>中,處理同上
38             address = doc.createElement('address')
39             address_text = doc.createTextNode(addr)
40             address.appendChild(address_text)
41             order.appendChild(address)
42 
43             # 將點餐次數插入<order>中,處理同上
44             count = doc.createElement('count')
45             count_text = doc.createTextNode(str(cnt))
46             count.appendChild(count_text)
47             order.appendChild(count)
48 
49         # 將dom對象寫入本地xml文件
50         with open(filename, 'w') as f:
51             f.write(doc.toprettyxml(indent='\t', encoding='utf-8'))
52 
53         return

  在先調用getAllOrders方法之后,再調用writeInfoToXml即可將所有信息寫入xml文件中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM