python向dbf表格寫入數據


最近性能測試需要造大量dbf表格數據,將簡潔易懂的代碼分享於諸君~

這是需要造的目標數據,第一個字段BMH要求自增1,XM也是如此,XBM和SFZJLXM在一個list范圍內隨機取值,其余字段不變,要生成這樣的dbf表格數據,請看下面代碼詳解~

 

import dbf,datetime
import random
import os, time
from multiprocessing import Pool



def add_bpm(num, HKSZDM):
table = dbf.Table(
filename='test',
field_specs='BMH C(20);XM C(10);XBM C(2);SFZJLXM C(2);'
'SFZJHM C(18);CSRQ C(8);MZM C(2);HKSZDM C(8);'
'ZP C(100)',
on_disk=False,
)
table.open(mode=dbf.READ_WRITE)
list = [1, 2, 3, 4, 'A', 'B', 'Z', 5, 6, 7, 8, 9]
list2 = ['01', '02', '03', '04', '05', '06', '55', '56', '97', '98', '23']
list_bp = ['3601021234501', '李考生一', '1', '1', '360102199904230123']
b = []
#num表示行數,要循環造多少行這樣的數據
for i in range(1,num+1):
list_bp[0] = str(HKSZDM) + str(1234501 + i) # BMH
list_bp[1] = "xm" + str(i) # XM
list_bp[2] = str(random.randint(1, 2)) # XBM
list_bp[3] = str(random.sample(list, 1)[0]) # SFZJLXM
list_bp[6] = str(random.sample(list2, 1)[0]) # MZM
list_bp[7] = str(HKSZDM) # HKSZDM

b.append(tuple(list_bp))

for datum in tuple(b):
table.append(datum)

custom = table.new(
filename=r'導入模板1.dbf',
default_data_types=dict(C=dbf.Char, D=dbf.Date, L=dbf.Logical),
)

with custom:
for record in table:
custom.append(record)

table.close()


def main():
  #cpu密集型任務采用多進程
startime = datetime.datetime.now()
print("主進程開始執行>>> pid={}".format(os.getpid()))
ps = Pool(4)
# ps.apply(add_bpm,args=(i,)) # 同步執行
   #一個dbf要造160000行數據
ps.apply_async(add_bpm(160000, 220102), args=()) # 異步執行

# 關閉進程池,停止接受其它進程
ps.close()
# 阻塞進程
ps.join()
print("主進程終止")
endtime = datetime.datetime.now()
print("共耗時:{0}".format(endtime-startime))

if __name__ == '__main__':
main()

 親測運行無誤~


免責聲明!

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



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