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='	', encoding='utf-8'))
52 
53         return

  在先调用getAllOrders方法之后,再调用writeInfoToXml即可将所有信息写入xml文件中。

原文地址:https://www.cnblogs.com/haigege/p/5712854.html