#!/usr/bin/python
# -*- coding: UTF-8 -*- import xml.sax
import io, sys paper_tags = ('article', 'inproceedings', 'proceedings', 'book', 'incollection', 'phdthesis', 'mastersthesis', 'www') sub_tags = ('publisher', 'journal', 'booktitle') ret = [] class DBLPHandler(xml.sax.ContentHandler): def __init__(self):
self.id = 1
self.reset() def reset(self):
self.dup_article = 0
self.curtag = None
self.author = ''
self.title = ''
self.pages = ''
self.year = ''
self.volume = ''
self.journal = ''
self.number = ''
self.url = ''
self.ee = '' def write_to_file(self, filename):
file_object = file(filename, 'a+')
for line in ret:
file_object.write(line.encode('utf8'))
#file_object.write('\n')
file_object.close() def record_row(self):
ret.append(u''.join((self.author, self.title, self.year, self.pages, self.journal, self.ee, '\n')).replace(' ', ''))
#ret.append(self.author + self.title + self.year + self.pages+ self.journal + self.ee)
#ret.append((self.author, self.title, self.year, self.pages, self.journal, self.ee))
#print (self.author, self.title, self.year, self.pages) def startElement(self, tag, attributes):
if tag != None and len(tag.strip()) > 0:
if tag == 'article':
self.dup_article += 1
self.curtag = tag def endElement(self, tag):
if tag != None and len(tag.strip()) > 0:
if tag == 'article':
self.record_row()
self.reset() def characters(self, content):
if content != '\n':
if self.curtag == "title":
self.title = content.strip()
elif self.curtag == "author":
self.author = content.strip()
elif self.curtag == "year":
self.year = content.strip()
elif self.curtag == "ee":
self.ee = content.strip()
elif self.curtag == "journal":
self.journal = content.strip()
elif self.curtag == "pages":
self.pages = content.strip()
elif self.url == "url":
self.url = content.strip()
elif self.number == "number":
self.number = content.strip()
elif self.number == "volume":
self.volume = content.strip() if (__name__ == "__main__"):
filename = 'dblp.xml'
if len(sys.argv) == 2:
filename = sys.argv[1]
# 创建一个 XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 重写 ContextHandler
Handler = DBLPHandler()
parser.setContentHandler(Handler) parser.parse(filename)
print 'Parser Complete!'
Handler.write_to_file('out')

另外附处理DNA数据的脚本程序:

lens_DNA = [0, 1000, 2000, 2500, 500, 1000, 1500, 2000, 2500]
lens_DBLP = [0, 40, 120, 200, 40, 80, 120, 160, 200] file_id = 1
LINE_MAX = 100 class DNA_Handler:
def __init__(self):
self.strn = '' def write_to_file(self, filename):
file_object = open(filename, 'a+')
file_object.write(self.strn)
file_object.close() def read_file(self, filename):
fo = open(filename, 'r')
line = fo.readline()
self.strn = ''
file_id = 1
cnt_lines = 0
while line and file_id < 9:
line = line.replace('\n', '')
self.strn += line
if len(self.strn) > lens_DNA[file_id]:
self.strn = self.strn[0: lens_DNA[file_id]] + '\n'
print self.strn
if file_id <= 3:
self.write_to_file('DNA_N' + str(file_id))
else:
self.write_to_file('DNA_M' + str(file_id - 3))
self.strn = ''
cnt_lines += 1
if cnt_lines >= LINE_MAX:
file_id += 1
cnt_lines = 0
line = fo.readline()
fo.close()
print 'read_finished!' class DBLP_Handler: def __init__(self):
self.strn = '' def write_to_file(self, filename):
file_object = open(filename, 'a+')
file_object.write(self.strn)
file_object.close() def read_file(self, filename):
fo = open(filename, 'r')
line = fo.readline()
self.strn = ''
file_id = 1
cnt_lines = 0
while line and file_id < 9:
line = line.replace('\n', '')
self.strn += line
if len(self.strn) > lens_DBLP[file_id]:
self.strn = self.strn[0: lens_DBLP[file_id]] + '\n'
print self.strn
self.write_to_file('DBLP_' + str(file_id))
self.strn = ''
cnt_lines += 1
if cnt_lines >= LINE_MAX:
file_id += 1
cnt_lines = 0
line = fo.readline()
fo.close()
print 'read_finished!' if (__name__ == '__main__'): dh = DNA_Handler()
dh.read_file('human_dna.fa')
'''
bblp_h = DBLP_Handler()
bblp_h.read_file('DBLP_data')
'''

   

python获取DBLP数据集的更多相关文章

  1. Python读取MNIST数据集

    MNIST数据集获取 MNIST数据集是入门机器学习/模式识别的最经典数据集之一.最早于1998年Yan Lecun在论文: Gradient-based learning applied to do ...

  2. 使用shell/python获取hostname/fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  3. python 获取日期

    转载   原文:python 获取日期 作者:m4774411wang python 获取日期我们需要用到time模块,比如time.strftime方法 time.strftime('%Y-%m-% ...

  4. python获取字母在字母表对应位置的几种方法及性能对比较

    python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...

  5. python获取文件大小

    python获取文件大小 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- import os # 字节bytes转化kb\m\g def formatSiz ...

  6. python 获取一个列表有多少连续列表

    python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:

  7. [python实用代码片段]python获取当前时间的前一天,前一周,前一个月

    python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...

  8. Python获取目录、文件的注意事项

    Python获取指定路径下的子目录和文件有两种方法: os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >> ...

  9. Python 获取 网卡 MAC 地址

    /*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...

随机推荐

  1. C#委拖小例子

    委托具有以下属性: 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起:例如,可以对一个事件调用多个方法. 方法不必与委 ...

  2. maven的SNAPSHOT版本和正式版本不同

    转载文章: http://www.huangbowen.net/blog/2016/01/29/understand-official-version-and-snapshot-version-in- ...

  3. 九度oj 题目1034:寻找大富翁

    题目链接:http://ac.jobdu.com/problem.php?pid=1034 题目描述:     浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. 输入:     输入包含多组测试用 ...

  4. BulkCopy频繁执行产生的性能问题

    问题现象: 完整的SQL脚本如下: from all_cons_columns acc, all_constraints ac where acc.owner = ac.owner and acc.c ...

  5. php 读取文件readfile

    <?php //读取文件 //echo readfile('aa.txt'); //打开文件更好的方法是fopen $f = fopen('aa.txt' , 'r') or die('unab ...

  6. 虚拟机Ubuntu16,caffe环境搭建

    虚拟机下的Ubuntu16.04+caffe+onlycup 官网的step很重要,要跟着官网,的步骤来:http://caffe.berkeleyvision.org/installation.ht ...

  7. MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. 1. Html.RenderPartial是直接将用户控件嵌入到界面上: <% ...

  8. ORM框架

    半自动:iBATIS是一个半自动化的ORM框架,需要通过配置方式指定映射SQL语句 全自:由框架本身生成(如Hibernate自动生成对应SQL来持久化对象),即Hibernate属于全自动ORM框架 ...

  9. [ActionScript 3.0] AS3.0 烟雾粒子效果

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; ...

  10. centos6.4安装VMwareTools

    centos6.4安装VMware Tools,同样适用于VMware.ESXi.Hypervisor #如果文件不存在需要创建 mkdir /mnt/cdrom #挂载光驱 mount -t aut ...