一、dbf文件解析
内容示例如下,读取全部内容:
实现思路:
1.每一行保存在一个字典中:key为字段名,value是字段值;
2.使用列表保存所有行记录(字典项)
(一)使用DbfLibrary需要安装dbfread第三方模块,可以通过pip安装,也可以到https://pypi.org/project/dbfread/#files下载dbfread压缩包,放在python安装目录C:\Python27下,解压后直接执行setup.py文件安装。
(二)自定义系统关键字
1.Test Library名称定义为DbfLibrary;
在pythin安装目录C:\Python27\Lib\site-packages路径下新建DbfLibrary文件夹
2.新建dbffileimport.py文件,定义类DbfFileImportt,在类方法中按照实现思路进行处理;
# -*- coding: utf-8 -*- from dbfread import DBF import datetime class DbfFileImport(object): def ProcDbfStkItfFileData(self,itfId,trdDate): """ dbf文件解析函数,调用方法:ProcDbfStkItfFileData('ITF_SZ_SJSKS','20181126'); """ if(itfId=='ITF_SZ_SJSKS'): """ 深圳发行可申购额度信息库SJSKS.DBF解析 """ fileName="D:\ITF\\vsat\SJSKS.DBF" sjsksList=[] sjsksTable=DBF(fileName) for record in sjsksTable: rdict={} for field in record: rdict[field]=record[field] #field是字段名,record[field]是字段值 if(field=='KSFSRQ'): rdict[field]=datetime.datetime.strftime(rdict[field],'%Y%m%d') #日期格式化 sjsksList.append(rdict) return sjsksList else: return 0; if __name__=="__main__": p=DbfFileImport(); sjskslist=p.ProcDbfStkItfFileData('ITF_SZ_SJSKS','20181127'); print(sjskslist)
3.新建__init__.py文件如下,类DbfLibrary继承上面的DbfFileImport,RobotFramework启动时会加载这个文件,从而调用类中定义的方法(关键字);
from dbffileimport import DbfFileImport __version__ = '0.6' class DbfLibrary(DbfFileImport): ROBOT_LIBRARY_SCOPE='GLOBAL';
4.重启Robot Framework,按F5即可搜索到DbfLibrary的关键字。;
二、xml文件解析
文件实例如下,要读取的是<SecurityID>标签内的内容
(一)自定义系统关键字
1.Test Library名称定义为XmlLibrary;
在pythin安装目录C:\Python27\Lib\site-packages路径下新建XmlLibrary文件夹.
2.新建文件imcsecurityparamshandler.py,处理xml文件;
# -*- coding: utf-8 -*- import xml.sax class imcsecurityparamsHandler(xml.sax.ContentHandler): """ currentData:保存当前元素标签,例如<a>test</a>,则currentData取值为a securityID:xml文件只读取标的证券代码 securityList:定义一个列表,保存所有的securityID """ def __init__(self): self.currentTag ='' self.securityID ='' self.securityList=[] # 元素开始事件处理 def startElement(self, name, attr): """ 遇到xml标签开始时调用,第二个参数是标签名,第三个参数是标签属性 """ self.currentTag = name #每遇到一个xml标签都将标签名保存在类的公有变量currentData中,所有的标签名都会保存在这里,currentData一直在变化 # 内容事件处理 def characters(self, content): """ 从行开始,遇到标签之前,存在字符,content的值为这些字符串。 从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。(这里是这种情况) 从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串 """ if self.currentTag == "SecurityID": #如果startElement解析到的标签名是SecurityID,就将元素的内容保存到类的公有变量securityID中,这里是过滤xml文件只读感兴趣的标签内容 self.securityID = content # 元素结束事件处理 def endElement(self, name): """ 遇到xml结束标签时调用 """ if self.currentTag == "SecurityID": self.securityList.append(self.securityID.rstrip()) def getImcsecurityList(self): return self.securityList
2.新建xmlfileimport.py文件,定义类XmlFileImport,调用上面handler定义的方法,获取文件解析的结果;
# -*- coding: utf-8 -*- import xml.sax from imcsecurityparamshandler import imcsecurityparamsHandler from szetfhandler import szetfHandler class XmlFileImport(object): def ProcXmlStkItfFileData(self,itfId,trdDate): """ XML文件解析函数,调用方法:ProcXmlStkItfFileData('ITF_SGT_IMCSECURITYPARAMS','20181126'); """ if(itfId=='ITF_SGT_IMCSECURITYPARAMS'): """ 深交所港股标的信息imcsecurityparams.xml解析 """ fileName="D:\ITF\imcsecurityparams_"+trdDate+".xml" imcsecuritytlist=[] parser = xml.sax.make_parser() # 创建一个 XMLReader parser.setFeature(xml.sax.handler.feature_namespaces, 0) # turn off namepsaces myHandler = imcsecurityparamsHandler() #创建imcsecurityparamsHandler对象,专门定义来处理imcsecurityparams.xml文件的类 parser.setContentHandler( myHandler )# 重写 ContextHandler parser.parse(fileName) imcsecuritytlist=myHandler.getImcsecurityList() return imcsecuritytlist else: return 0; if __name__=="__main__": p=XmlFileImport(); #imcsecuritytlist=p.ProcXmlStkItfFileData('ITF_SGT_IMCSECURITYPARAMS','20181128'); baseinfo=p.ProcPcfXmlStkItfFileData('ITF_SZ_ETF_V5','20181213','158812'); print(baseinfo)
3.新建__init__.py文件如下,类XmlLibrary继承上面的XmlFileImport,RobotFramework启动时会加载这个文件,从而调用类中定义的方法(关键字);
from xmlfileimport import XmlFileImport __version__ = '0.6' class XmlLibrary(XmlFileImport): ROBOT_LIBRARY_SCOPE='GLOBAL';
4.重启Robot Framework,按F5即可搜索到XmlLibrary的关键字。;