一、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的關鍵字。;
