libxml2是一个很强大的处理XML文件的Python模块,通过C写成,这里介绍了一下基本的资料,安装,下载和基本指令,还有一个libxml2造成的内存泄露的处理方式。
官方网址:
http://xmlsoft.org/
具体的下载地址,埋的很深,至少我花了一段时间才找到,这里直接给出win32下的Python模块下载地址:
http://xmlsoft.org/sources/win32/python/
根据自己的Python版本下载就行。
官方网站上给的操作信息是在少的可怜,只有单单一页的Python API介绍
http://xmlsoft.org/python.html
后来找了一些大神的博客才算零零碎碎的筹齐需要的知识点:
XPath (libxml2) in Python
http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-1/
http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-2/
这几就介绍一下最简单的操作:
import libxml2 doc = libxml2.parseFile(filename) #可以使用parseDoc代替parseFile,两者的区别是DOC处理已经读进进程的文件,File是能自己读取文件,所以只需要提供文件名。 ctxt = doc.xpathNewContext() record_nodes = ctxt.xpathEval('/*') #括号中的XPATH,这是寻找的是根目录下的所有NODE。 xpathEval寻找结果给出的是一个x列表,如xrange(10)生成的内容。 for node in record_nodes: name = node.name #node的名字 content = node.content #node的内容 sous-nodes = node.xpathEval('*') #node下面的子node,同处理根目录的原理一下进行处理。 ... #释放内存 if doc: doc.freeDoc()
由于libxml2在读取xml文本后不会自动释放内存,因此会出现内存泄露问题,这个困扰了我好久,一直以为是Python的程序问题,,找了一大堆Python程序的内存管理资料,但是最后才发现是libxml2的问题。所以上面代码中给出了释放内存的指令,非常非常重要!
ps python下管理内存模块gc
import gc a=['abc' for x in range(1000**5)] del a gc.collect()