RobotFramework自定義系統關鍵字解析txt,csv,dbf,xml格式文件(下)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM