由于最近处理数据时涉及到dblp.xml,刚开始下载时dblp.xml只有300多M,但解压之后就有1.9G,没有什么东西能够打开,所以必须要用工具来处理,在python中sax包能够一边解析一边处理XML数据
首先我们要知道dblp.xml里面的数据是什么格式的:
以下为处理dplp.xml数据的代码(以下为我需要的数据,大家可以根据自己需要的数据来获取数据):
# -*-coding:utf-8-*-
import xml.sax
datas=set()
class MovieHandler(xml.sax.ContentHandler):
def __init__(self):
self.title = ""
self.ee = ""
self.year=""
self.journal=""
# 元素开始事件处理
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "article":
key = attributes["key"]
# 元素结束事件处理
def endElement(self, tag):
if self.CurrentData == "title":
print u'title:',self.title
elif self.CurrentData == "ee":
print u'ee:',self.ee
elif self.CurrentData == "journal":
print u'journal:',self.journal
if self.CurrentData == "year":
print u'year:', self.year
self.CurrentData = ""
# 内容事件处理
def characters(self, content):
if self.CurrentData == "title":
self.title = content
elif self.CurrentData == "ee":
self.ee = content
elif self.CurrentData == "year":
self.year = content
elif self.CurrentData == "journal":
self.journal = content
if (__name__ == "__main__"):
# 创建一个 XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写 ContextHandler
Handler = MovieHandler()
parser.setContentHandler(Handler)
parser.parse("dblp.xml")
特别注意解析dblp.xml的时候要把dblp.dtd下载下来放在对应文件夹,要不python会显示缺少该文件