Python解析excel文件存入sqlite數(shù)據(jù)庫的方法
一、建立數(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ù)庫 相對簡單 在此不做太多介紹 如果大家對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)容對大家學(xué)習(xí)或者使用python能有所幫助,如果有疑問大家可以留言交流。
- Python操作sqlite3快速、安全插入數(shù)據(jù)(防注入)的實(shí)例
- Python操作SQLite簡明教程
- Python3實(shí)現(xiàn)連接SQLite數(shù)據(jù)庫的方法
- python操作數(shù)據(jù)庫之sqlite3打開數(shù)據(jù)庫、刪除、修改示例
- python從sqlite讀取并顯示數(shù)據(jù)的方法
- Python SQLite3數(shù)據(jù)庫操作類分享
- 在Python中使用SQLite的簡單教程
- Python獲取SQLite查詢結(jié)果表列名的方法
- Python使用flask框架操作sqlite3的兩種方式
- python實(shí)現(xiàn)在sqlite動(dòng)態(tài)創(chuàng)建表的方法
- python sqlite的Row對象操作示例
相關(guān)文章
Python基于dom操作xml數(shù)據(jù)的方法示例
這篇文章主要介紹了Python基于dom操作xml數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python針對xml格式文件的加載、讀取、節(jié)點(diǎn)與屬性遍歷等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05一文教你如何用Python輕輕松松操作Excel,Word,CSV
數(shù)據(jù)處理是 Python 的一大應(yīng)用場景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件。本文將為大家詳細(xì)介紹一下如何用Python輕輕松松操作Excel、Word、CSV,需要的可以參考一下2022-02-02python用fsolve、leastsq對非線性方程組求解
這篇文章主要為大家詳細(xì)介紹了python用fsolve、leastsq對非線性方程組進(jìn)行求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Python 異步協(xié)程函數(shù)原理及實(shí)例詳解
這篇文章主要介紹了Python 異步協(xié)程函數(shù)原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python爬蟲使用瀏覽器cookies:browsercookie過程解析
這篇文章主要介紹了Python爬蟲使用瀏覽器cookies:browsercookie,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10關(guān)于Python中 循環(huán)器 itertools的介紹
循環(huán)器是對象的容器,包含有多個(gè)對象。通過調(diào)用循環(huán)器的next()方法 (__next__()方法,在Python 3.x中),循環(huán)器將依次返回一個(gè)對象。直到所有的對象遍歷窮盡,循環(huán)器將舉出StopIteration錯(cuò)誤。這篇文章將對此做一個(gè)詳細(xì)介紹,感興趣的小伙伴請參考下面文字內(nèi)容2021-09-09Python推導(dǎo)式簡單示例【列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式】
這篇文章主要介紹了Python推導(dǎo)式,結(jié)合簡單實(shí)例形式分析了Python列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式基本使用方法,需要的朋友可以參考下2018-12-12