99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Python解析excel文件存入sqlite數(shù)據(jù)庫的方法
Python解析excel文件存入sqlite數(shù)據(jù)庫的方法
2017-08-12
收藏

Python解析excel文件存入sqlite數(shù)據(jù)庫的方法

最近工作中遇到一個(gè)需求,需要使用Python解析excel文件并存入sqlite,本文就實(shí)現(xiàn)的過程做個(gè)總結(jié)分享給大家,文中包括數(shù)據(jù)庫設(shè)計(jì)、建立數(shù)據(jù)庫、Python解析excel文件、Python讀取文件名并解析和將解析的數(shù)據(jù)存儲(chǔ)入庫,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。

一、建立數(shù)據(jù)庫

根據(jù)需求建立數(shù)據(jù)庫,建立了兩個(gè)表,并保證了可以將數(shù)據(jù)存儲(chǔ)到已有的數(shù)據(jù)庫中,代碼如下:
import sqlite3
 
def createDataBase():
cn = sqlite3.connect('check.db')
 
cn.execute('''CREATE TABLE IF NOT EXISTS TB_CHECK
(ID integer PRIMARY KEY AUTOINCREMENT,
NUMBER INTEGER,
ITEM TEXT,
REFERENCE TEXT,
SUMMARY TEXT,
OBJECT TEXT,
METHOD TEXT,
CONDITION TEXT,
VALUE TEXT,
RESULT TEXT,
SCORE TEXT,
REMARKS TEXT,
PROVINCE TEXT,
TIME TEXT);''')
 
cn.execute('''CREATE TABLE IF NOT EXISTS TB_SCORE
(ID integer PRIMARY KEY AUTOINCREMENT,
PROVINCE TEXT,
TIME TEXT,
FILETYPE TEXT,
SCORE INTEGER);''')
 
if __name__ == '__main__':
createDataBase()

二、使用Python解析excel

Python中的xlrd模塊用來解析excel。

相關(guān)功能介紹如下:

1. 導(dǎo)入
import xlrd

2. 讀取數(shù)據(jù)
data = xlrd.open_workbook('file.xls')

3. 功能

(1) 通過索引獲取
table = data.sheet()[0]
table = data.sheet_by_index(0)

(2)通過名稱獲取
table = data.sheet_by_name(u'sheet1')

(3)獲取整行和整列的值(數(shù)組)

table.row_values(i)
table.col_values(i)

(4)獲取行數(shù)和列數(shù)

nrows = table.nrows
ncols = table.ncols

(5)循環(huán)行列表數(shù)據(jù)
for i in range(nrows):
print table.row_values(i)

(6)單元格
cell_A1 = table.cell(0,0).value

(7)使用行列索引 
cell_A1 = table.cell(0,0).value

練習(xí)代碼:
import xlrd
import xlwt
from datetime import date,datetime
 
def read_excel():
# 打開文件
workbook = xlrd.open_workbook(r'file.xls')
# 獲取所有sheet
sheet_name = workbook.sheet_names()[0]
sheet = workbook.sheet_by_name(sheet_name)
 
#獲取一行的內(nèi)容
for i in range(6,sheet.nrows):
for j in range(0,sheet.ncols):
print sheet.cell(i,j).value.encode('utf-8')
 
if __name__ == '__main__':
read_excel()

三、Python讀取文件名并解析

為了將各個(gè)文件的數(shù)據(jù)加以區(qū)分,需要將文件名中標(biāo)志性字段入庫,解析文件的代碼如下:
import os
 
def getFileList(dir,wildcard,recursion):
 os.chdir(dir)
 
 fileList = []
 check_province = []
 check_time = []
 file_type = []
 
 exts = wildcard.split(" ")
 files = os.listdir(dir)
 for name in files:
  fullname=os.path.join(dir,name)
  if(os.path.isdir(fullname) & recursion):
   getFileList(fullname,wildcard,recursion)
  else:
   for ext in exts:
    if(name.endswith(ext)):
     fileList.append(name)
     check_province.append(name.split('-')[1])
     check_time.append(name.split('-')[0])
     file_type.append(name.split('-')[2])
 return fileList,check_time,check_province,file_type

在接下來的使用中 會(huì)遇到編碼問題 所以在使用這些字段時(shí)需要先轉(zhuǎn)碼,編寫轉(zhuǎn)碼函數(shù)如下:
 
#轉(zhuǎn)碼函數(shù)
def changeCode(name):
   name = name.decode('GBK')
   name = name.encode('UTF-8')
   return name

四、解析excel文件并將其存儲(chǔ)到sqlite

Python連接數(shù)據(jù)庫 選取了Python自帶的sqlite數(shù)據(jù)庫 相對(duì)簡單 在此不做太多介紹 如果大家對(duì)Python操作sqlite有疑惑的話 個(gè)人推薦菜鳥教程~

下面是解析excel文件并存入數(shù)據(jù)庫,其中包含了判斷單元格內(nèi)容:
def readExcel(filename,cn,check_province,check_time,FileType):
 #讀取
 workbook = xlrd.open_workbook(filename)
 # 獲取sheet
 sheet_name = workbook.sheet_names()[0]
   sheet = workbook.sheet_by_name(sheet_name)
 
 check_Item = 'a'
 
 itemCount = 0
 score = 0
 
 second = sheet.cell(7,1).value.encode('utf-8')
 
 for i in range(7,sheet.nrows):
  if sheet.cell(i,1).value.encode('utf-8') == second:
   check_Item = sheet.cell(i,0).value.encode('utf-8')
   continue
 
  temp = []
  for j in range(0,sheet.ncols):
   temp.append(sheet.cell(i,j).value.encode('utf-8'))
 
  answer = sheet.cell(i,7).value.encode('utf-8')
 
  if answer == "yes" or answer == "no":
   score = score + 1
 
  if answer == "other":
   print "!!!Failed to import'%s'" % (filename)
   print "!!!Please Choose an Right Answer for '%s'--------"%(filename)
   break
  else:
   cn.execute("insert into TB_CHECK (ITEM,FIELD,TYPE,CONTENT,"
      "ATTRIBUTE,CHECKPOINT,REMARKS,ANSWER,DESCRIPTION,"
      "SUGGESTION,PROVINCE,TIME,STYLE) "
      "values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')"
      ""%(temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8],temp[9],check_province,check_time,check_Item))
 
   itemCount = itemCount + 1
 if itemCount != 0:
  score = round(score * (100 / itemCount), 2)
  cn.execute("insert into TB_SCORE (PROVINCE,TIME,FILETYPE,SCORE) "
    "values('%s','%s','%s','%.2f')"%(check_province,check_time,FileType,score))
  print "Successful for'%s'--------" % (filename)
 cn.commit()
整合上述功能:
def importData(path):
 # 數(shù)據(jù)庫
 createDataBase()
 database = sqlite3.connect("check.db")
 
 #文件類型
 wildcard = ".xls"
 
 list = getFileList(path,wildcard,1)
 
 nfiles = len(list[0])
 #文件名
 file = list[0]
 #時(shí)間
 time = list[1]
 #省份
 province = list[2]
 # #文件類型
 FileType = list[3]
 
 for count in range(0,nfiles):
  filename = file[count]
  check_province = changeCode(province[count])
  check_time = time[count]
  File_type = changeCode(FileType[count])
  readExcel(filename,database,check_province,check_time,File_type)
 
if __name__ == '__main__':
 if len(sys.argv) != 2:
  print "Wrong Parameters"
 else:
  path = sys.argv[1]
  importData(path)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用python能有所幫助


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }