python实例五:新建xml文件,建立图书库存
听说xml是一个非常好用的可可扩展格式,而且无论是是什么语言,基本都会或者都将支持xml数据格式。另外还有一个非常特色的功能,就是它能组建数据库,平常数据库更多的用MySQL数据库,其实通过xml也可以建立自己的数据库,xml同样拥有数据库一般的操作。
下面就来研究下python如何建立xml格式文件,以及如何写入数据等。我比较喜欢鲁迅的一些书籍,比如《呐喊》,《朝花夕拾》等,下面就以这两本书为例,详述python是如何操作xml的。
例子如下,某网店的这两本书的三个月的销售状况如下:
title(书名) | writer(作者) | price(价格) | amount(库存) | Sales_volume(销量) |
呐喊 | 鲁迅 | 16 | 2566 | 3887 |
朝花夕拾 | 鲁迅 | 18 | 1851 | 3149 |
现在需要用python将图书的价格、库存、销量等以xml格式文本记录下来以便查询。为此,先要建立字段名,如:title用以标识书名,writer用以标识作者,price用以标识价格,amount标识库存,sales_volume标识销量。创建读取xml文件一般可以用SAX或者DOM,但由于SAX比较比较麻烦,不太方便,本次实例只用DOM中的minidom模块来对文件进行解析,并用到函数如:createElement()、createTextNode()、appendChild()等。实现代码如下所示:
from xml.dom.minidom import Document doc=Document()#创建DOM文档对象 book=doc.createElement('book')#创建根元素 '''根元素创建后,开始增加第一本书籍''' book.setAttribute('writer','鲁迅')#设置根元素属性 doc.appendChild(book)#增加book节点 title=doc.createElement('title')#创建title节点 title_text=doc.createTextNode('呐喊')#创建书名 book.appendChild(title)#增加title节点 title.appendChild(title_text)#增加书名 display=doc.createElement('display')#新建diplay节点 book.appendChild(display) price=doc.createElement('price')#新建价格节点 price_text=doc.createTextNode('16') amount=doc.createElement('amount')#新建库存节点 amount_text=doc.createTextNode('2566') sales_volume=doc.createElement('sales_volume') sales_volume_text=doc.createTextNode('3887') display.appendChild(price)#增加价格节点 display.appendChild(amount)#增加库存节点 display.appendChild(sales_volume)#增加销售量节点 price.appendChild(price_text) amount.appendChild(amount_text) sales_volume.appendChild(sales_volume_text) #**************以下为增加第二本数销售状况******** title=doc.createElement('title') title_text=doc.createTextNode('朝花夕拾') book.appendChild(title) title.appendChild(title_text) display=doc.createElement('display') book.appendChild(display) price=doc.createElement('price') price_text=doc.createTextNode('18') amount=doc.createElement('amount') amount_text=doc.createTextNode('1851') sales_volume=doc.createElement('sales_volume') sales_volume_text=doc.createTextNode('3149') display.appendChild(price) display.appendChild(amount) display.appendChild(sales_volume) price.appendChild(price_text) amount.appendChild(amount_text) sales_volume.appendChild(sales_volume_text) #数据创建完毕 '''open为打开book.xml文件,没有则新建''' file=open('book.xml','w',encoding='UTF-8') doc.writexml(file,indent='',newl='\n',addindent='\t',encoding='utf-8') '''上述open()方法和writexml()方法中encoding需要一致,不一致可能会出错''' file.close()#输入后要记得关闭数据文件
在上面的实例中用display来包含price、amount、sales_volume属性,这样更方便。上述代码运行结果如下:
当然上面数据重复的有很多,比如price.appendChild等出现重复,可以使用自定义函数加以精简。