Archives for posts tagged ‘Python’

用lxml来解析大型xml文件+命令行中的python

上周被布置了一个任务,要解析一个大约有600MB左右的xml文件,从中提取所需的信息然后输出成一个csv文件。从来没有做过类似东西的我,加上不太熟悉的python、linux和vim,这样一个简单的东西花了一天半才解决,不过解决的还算比较完美吧,用lxml这个库,原本以为要至少10几分钟的解析过程其实只用了1分钟左右,说起来,还是c比较强大啊,lxml的底层使用c实现的,换成python恐怕就够呛了。好了废话不多说,讲讲lxml的用法和我在做这个任务里碰到的几个问题吧,权当复习和备份。 用lxml载入xml文件 lxml是c中的libxml的python实现,在保证效率的情况下,为程序员免去了内存管理方面的麻烦,具体介绍大家还是移步它的官网吧。 首先在python里import lxml的etree模块,然后用etree里的parse函数从文件中解析xml,解析得到的是一个ElementTree的实例,用这个实例的getroot函数就能得到xml中的root。root是对象Element的一个实例,对这个root可以做indexing,即用过root[n]可以得到root下相应的子节点,这些子节点同样也是Element的实例,所以通过root[n][m]就可遍历各个节点。 >>>from lxml import etree >>>tree = etree.parse(open(“file_name”,“rb”)) >>>root = tree.getroot() 另外,对一个Element还可以进行iterate操作,iterate会依次遍历Element下的所有子节点、子节点的子节点,然后按照顺序,返回一个所有节点的序列。 如果我们有这样一个xml:

Windows Live Space转移到WordPress平台

上周看着自己冗长的MSN用户名和乱七八糟的Hotmail联系簿,加上Space的慢速和5个月的Wordpress使用经验,让我做出了将MSN,Gtalk和个人邮箱都转移到一个域名下,并且在ibeca.me上开通子域名life.ibeca.me将我的Live Space上的个人生活心情博客转移过来。不算上开通子域名\新数据库的时间,搭建一个全新的Wordpress并将原有的Live Space上的博文转移到现有博客上只花了半个小时不到,反而我将MSN的联系人转移到新的MSN账号上花了一个多小时.其实本来也不用这么长时间,不过该死的windows live的联系人导出成CVS后所有的中文人名居然都成了乱码,害的我必须手动的讲一个个人名改成拼音,再导出导入,再改回中文。所谓Painful就是这个意思。 (via)