python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件
想要實(shí)現(xiàn)打開dbf文件后寫入數(shù)據(jù),奈何python3網(wǎng)上沒(méi)有任何方法,有一個(gè)人自己寫了個(gè)類,基于個(gè)人要求,需要操作dbf文件實(shí)現(xiàn)內(nèi)容添加,以下方法需要python2的環(huán)境來(lái)是實(shí)現(xiàn)。
需求:向八個(gè)dbf文件中插入數(shù)據(jù)
一、需要導(dǎo)入的模塊
import string import time import random import sys import os import csv import getopt from dbfpy import dbf import itertools import warnings warnings.filterwarnings('ignore')
二、實(shí)現(xiàn)dbf文件操作
class Do_to_Dbf(object): def __init__(self,Cilent_id,Fund_acc,SecuAcc): self.Cilent_id=Cilent_id self.Fund_acc = Fund_acc self.SecuAcc=SecuAcc # 創(chuàng)建新的dbf文件 def writeDbfFile(self,filename,header,content): db=dbf.Dbf(filename,new=True) for field in header: if type(field) == unicode: field = field.encode('GBK') db.addField((field, 'C', 60)) for record in content: rec = db.newRecord() for key, value in itertools.izip(header, record): if type(value) == unicode: rec[key] = value.encode('GBK') else: rec[key] = value rec.store() db.close() # 再原有的dbf文件中追加內(nèi)容 def add_DbfFile_content(self,filename,content): db=dbf.Dbf(filename) for record in content: rec = db.newRecord() for key, value in itertools.izip(db.header, record): if type(value) == unicode: rec[key] = value.encode('GBK') else: rec[key] = value rec.store() db.close() def get_code(self): code = [[], []] code[0] = ['000002', '000060', '159901', '159930', '300030'] code[1] = ['510010', '510300', '600036', '688001', '700360'] return code ## 下邊的函數(shù)create開頭的都是創(chuàng)建新的dbf文件,根據(jù)需要的表頭來(lái) ## ## 下邊的函數(shù)add開頭的都是再原有dbf文件下添加內(nèi)容 ## def create_custinfo(self): header=['CilentID','CilentName','BranchID','EncMode','TradePwd','Status'] pwd = '34614C364D51746D79335231584559444D68337470673D3D' content=[] for i in range(len(self.Cilent_id)): part=[ self.Cilent_id[i], self.Cilent_id[i], self.Cilent_id[i][:4], 1, pwd, 0] content.append(part) filename='doc/'+'custinfo_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_fundasset(self): header=['FundAcc','CurType','FundAvlBal','FundFrzBal','FundBal','FBuySale','FUncBuy','FUncSale','FFundTrsf'] content=[] for i in range(len(self.Fund_acc)): part=[ self.Fund_acc[i], 0, 'F2195BC3951AAD0465B72CE593B79141', 'A160C3DB0CE4098FDCD07FC86865BF33', 'F2195BC3951AAD0465B72CE593B79141', 'A160C3DB0CE4098FDCD07FC86865BF33', 'A160C3DB0CE4098FDCD07FC86865BF33', 'A160C3DB0CE4098FDCD07FC86865BF33', 'BAFBDC944A98ADCD131416B325BE8D3C' ] content.append(part) filename='doc/'+'fundasset_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_fundinfo(self): header=['FundAcc','FAccType','ClientID','TradeWays','FAccStatus','FundLimits','TrdRights','FundRights','CreditFlag','CreStatus','InvestType'] content=[] for i in range(len(self.Fund_acc)): part=[ self.Fund_acc[i], 1, self.Cilent_id[i], 'jk012345678', 0, '?', '01234567', '@', 0, 0, 0 ] content.append(part) filename='doc/'+'fundinfo_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_fundtrdctrl(self): header=['FundAcc','Market','BSFlag','StkType','StkCode','Direct'] content=[] # for i in range(len(self.Fund_acc)): # part=[ # self.Fund_acc[i], # 1, # 2, # 0, # '002612', # 1 # ] # content.append(part) # print(content) filename='doc/'+'fundtrdctrl_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_secuinfo(self): header=['ClientID','SecuAcc','SAccType','Market','RegFlag','Seat','Status','SAccLimits','SecuRights'] content=[] for i in range(len(self.Cilent_id)): for j in range(2): seat=['016701',''] part=[ self.Cilent_id[i], self.SecuAcc[j][i], 1, j, j, seat[j], 0, '', '@' ] content.append(part) filename='doc/'+'secuinfo_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_SJSKS(self): header=['KSXWDM','KSGDDM','KSYWLB','KSKSGE','KSFSRQ','KSBYZD'] content=[] # for i in range(len(Fund_acc)): # part=[ # '', # '', # '', # '', # '', # ] # content.append(part) filename='doc/'+'SJSKS_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_stkasset(self): header=['FundAcc','Market','SecuAcc','StockCode','StkAvlQty','StkFrzQty','StkBal', 'SBuySale','SBuyUnFrz','SSaleFrz','LstBuyCst','LstprfCst','BuyCst', 'ProfitCst','StkRemain','StkCorpRem','CreStkBal'] content=[] for i in range(len(self.Fund_acc)): for j in range(2): codes=self.get_code() for code in codes[j]: part=[ self.Fund_acc[i], j, self.SecuAcc[j][i], code, 'F461FA1CB2A69A4EBB12F130455748DB', 'BAFBDC944A98ADCD131416B325BE8D3C', 'F461FA1CB2A69A4EBB12F130455748DB', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', ] content.append(part) filename='doc/'+'stkasset_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def create_zqyXXXXX(self): header=['gddm','zqye','qysl','kcqy','gsdm','zhxh','djrq','clbz'] content=[] # for i in range(len(Fund_acc)): # part=[ # '', # '', # '', # '', # '', # '', # '', # '', # ] # content.append(part) filename='doc/'+'zqyXXXXX_v01_12360000_3_%s.dbf'%(time.strftime('%Y%m%d_%H',time.localtime())) self.writeDbfFile(filename,header,content) def add_custinfo(self): content=[] pwd = '34614C364D51746D79335231584559444D68337470673D3D' for i in range(len(self.Cilent_id)): part=[ self.Cilent_id[i], self.Cilent_id[i], self.Cilent_id[i][:4], 1, pwd, 0] content.append(part) filename='doc/custinfo_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_fundasset(self): content=[] for i in range(len(self.Fund_acc)): part=[ self.Fund_acc[i], 0, 'F2195BC3951AAD0465B72CE593B79141', 'A160C3DB0CE4098FDCD07FC86865BF33', 'F2195BC3951AAD0465B72CE593B79141', 'A160C3DB0CE4098FDCD07FC86865BF33', 'A160C3DB0CE4098FDCD07FC86865BF33', 'A160C3DB0CE4098FDCD07FC86865BF33', 'BAFBDC944A98ADCD131416B325BE8D3C' ] content.append(part) filename='doc/fundasset_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_fundinfo(self): content=[] for i in range(len(self.Fund_acc)): part=[ self.Fund_acc[i], 1, self.Cilent_id[i], 'jk012345678', 0, '?', '01234567', '@', 0, 0, 0 ] content.append(part) filename='doc/fundinfo_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_fundtrdctrl(self): content=[] filename='doc/fundtrdctrl_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_secuinfo(self): content=[] for i in range(len(self.Cilent_id)): for j in range(2): seat=['016701',''] part=[ self.Cilent_id[i], self.SecuAcc[j][i], 1, j, j, seat[j], 0, '', '@' ] content.append(part) filename='doc/secuinfo_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_SJSKS(self): content=[] filename='doc/SJSKS_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_stkasset(self): content=[] for i in range(len(self.Fund_acc)): for j in range(2): codes=self.get_code() for code in codes[j]: part=[ self.Fund_acc[i], j, self.SecuAcc[j][i], code, 'F461FA1CB2A69A4EBB12F130455748DB', 'BAFBDC944A98ADCD131416B325BE8D3C', 'F461FA1CB2A69A4EBB12F130455748DB', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', '77E3F6BDC6D282F4FA3841AD363517CD', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', 'BAFBDC944A98ADCD131416B325BE8D3C', ] content.append(part) filename='doc/stkasset_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content) def add_zqyXXXXX(self): content=[] filename='doc/zqyXXXXX_v01_12360000_3_20191014_01.dbf' self.add_DbfFile_content(filename,content)
三、生成需要的數(shù)據(jù)和提供腳本參數(shù)
# 因?yàn)轫?xiàng)目要實(shí)現(xiàn)自動(dòng)化腳本,傳入兩個(gè)參數(shù),從那個(gè)賬號(hào)開始,以及多少個(gè)數(shù)據(jù) # def message(argv): start_account = "" num = "" try: opts, args = getopt.getopt(argv, "hs:n:", ["help", "start_account=", "num="]) except getopt.GetoptError: print('Error:create_dbf_file.py -s <start_account> -n <num>') print(' or: create_dbf_file.py --start_account=<start_account> --num=<num>') sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): print(' create_dbf_file.py -s <start_account> -n <num>') print(' create_dbf_file.py --start_account=<start_account> --num=<num>') sys.exit() elif opt in ("-s", "--start_account"): start_account = arg elif opt in ("-n", "--num"): num = arg def get_account(start_account,num): accounts = [] for i in range(num): account=start_account +i accounts.append(str(account)) return accounts def get_secuacc(tools,num): secuacc=[[],[]] for i in ['0','A']: if i=='0': passwds = secuacc[0] else: passwds = secuacc[1] while len(passwds)< int(num): part=random.sample(tools,9) passwd="".join(part) if passwd in passwds: continue else: passwds.append(i+passwd) return secuacc # 保存數(shù)據(jù) def create_to_csv(file_path,filename,data): f=open(file_path+'/'+filename,'wb') writer=csv.writer(f) a=[] for i in data: a.append(i.decode("utf-8").encode("gbk")) writer.writerows(a) f.close() def read_to_csv(filename): reader=csv.reader(open(filename)) a=[] for i in reader: s=''.join(i) a.append(s) return a
四、調(diào)用
if __name__ == '__main__': # 代碼需要命令行執(zhí)行,需要傳入?yún)?shù),有提示在message函數(shù)里 # tools=string.digits message(argv=sys.argv[1:]) Cilent_id=get_account(int(sys.argv[1]),int(sys.argv[2])) Fund_acc=get_account(int(time.strftime('%m%d%H%S0000',time.localtime())),int(sys.argv[2])) SecuAcc=get_secuacc(tools,int(sys.argv[2])) file_path=os.getcwd()+'/data' if os.path.isdir(file_path): pass else: os.mkdir(file_path) create_to_csv(file_path,'Cilent_id',Cilent_id) create_to_csv(file_path,'Fund_acc',Fund_acc) create_to_csv(file_path,'SecuAcc_SH',SecuAcc[0]) create_to_csv(file_path, 'SecuAcc_SZ', SecuAcc[1]) add_dbffile=Do_to_Dbf(Cilent_id,Fund_acc,SecuAcc) # add_dbffile.create_custinfo() # add_dbffile.create_fundasset() # add_dbffile.create_fundinfo() # add_dbffile.create_fundtrdctrl() # add_dbffile.create_SJSKS() # add_dbffile.create_zqyXXXXX() # add_dbffile.create_stkasset() # add_dbffile.create_secuinfo() add_dbffile.add_custinfo() add_dbffile.add_fundasset() add_dbffile.add_fundinfo() add_dbffile.add_fundtrdctrl() add_dbffile.add_secuinfo() add_dbffile.add_SJSKS() add_dbffile.add_stkasset() add_dbffile.add_zqyXXXXX()
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Sublime?Text4?配置?Python3?環(huán)境、代碼提示、編譯報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Sublime?Text4?配置?Python3?環(huán)境、代碼提示、編譯報(bào)錯(cuò)教程,通過(guò)圖文并茂的形式給大家介紹了配置自動(dòng)代碼提示的方法,需要的朋友可以參考下2022-01-01python3+openCV 獲取圖片中文本區(qū)域的最小外接矩形實(shí)例
這篇文章主要介紹了python3+openCV 獲取圖片中文本區(qū)域的最小外接矩形實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python實(shí)現(xiàn)發(fā)送帶附件的郵件代碼分享
在本篇文章里小編給大家整理的是關(guān)于python實(shí)現(xiàn)發(fā)送帶附件的郵件代碼分享內(nèi)容,需要的朋友們可以參考下。2020-09-09Python3 requests文件下載 期間顯示文件信息和下載進(jìn)度代碼實(shí)例
這篇文章主要介紹了Python3 requests文件下載 期間顯示文件信息和下載進(jìn)度代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法
今天小編就為大家分享一篇Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10