欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年11月15日 09:49:40   作者:楊可愛  
最近工作中遇到一個(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ù)庫 相對簡單 在此不做太多介紹 如果大家對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能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Python基于dom操作xml數(shù)據(jù)的方法示例

    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

    一文教你如何用Python輕輕松松操作Excel,Word,CSV

    數(shù)據(jù)處理是 Python 的一大應(yīng)用場景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件。本文將為大家詳細(xì)介紹一下如何用Python輕輕松松操作Excel、Word、CSV,需要的可以參考一下
    2022-02-02
  • python用fsolve、leastsq對非線性方程組求解

    python用fsolve、leastsq對非線性方程組求解

    這篇文章主要為大家詳細(xì)介紹了python用fsolve、leastsq對非線性方程組進(jìn)行求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python?arrow?更好的日期時(shí)間模塊

    Python?arrow?更好的日期時(shí)間模塊

    這篇文章主要為大家介紹Python的arrow日期時(shí)間模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Python 異步協(xié)程函數(shù)原理及實(shí)例詳解

    Python 異步協(xié)程函數(shù)原理及實(shí)例詳解

    這篇文章主要介紹了Python 異步協(xié)程函數(shù)原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python爬蟲使用瀏覽器cookies:browsercookie過程解析

    Python爬蟲使用瀏覽器cookies:browsercookie過程解析

    這篇文章主要介紹了Python爬蟲使用瀏覽器cookies:browsercookie,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python中如何檢查字符串是否包含列表中的元素

    Python中如何檢查字符串是否包含列表中的元素

    在數(shù)據(jù)預(yù)處理或糾錯(cuò)的過程中可能會(huì)用到對列表中是否含有我們需要的字符串的判斷,下面這篇文章主要給大家介紹了關(guān)于Python中如何檢查字符串是否包含列表中的元素的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于Python中 循環(huán)器 itertools的介紹

    關(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-09
  • Python推導(dǎo)式簡單示例【列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式】

    Python推導(dǎo)式簡單示例【列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式】

    這篇文章主要介紹了Python推導(dǎo)式,結(jié)合簡單實(shí)例形式分析了Python列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式基本使用方法,需要的朋友可以參考下
    2018-12-12
  • Python進(jìn)度條的使用

    Python進(jìn)度條的使用

    在使用Python處理比較耗時(shí)操作的時(shí)候,為了便于觀察處理進(jìn)度,就需要通過進(jìn)度條將處理情況進(jìn)行可視化展示,本文主要介紹了Python進(jìn)度條的使用,分享給大家,感興趣的可以了解一下
    2021-05-05

最新評論