Python解析excel文件存入sqlite数据库的方法


Posted in Python onNovember 15, 2016

一、建立数据库

根据需求建立数据库,建立了两个表,并保证了可以将数据存储到已有的数据库中,代码如下:

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。

相关功能介绍如下:

1. 导入

import xlrd

2. 读取数据

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)获取整行和整列的值(数组)

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

(4)获取行数和列数

nrows = table.nrows
ncols = table.ncols

(5)循环行列表数据

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

练习代码:

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)

#获取一行的内容
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读取文件名并解析

为了将各个文件的数据加以区分,需要将文件名中标志性字段入库,解析文件的代码如下:

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

在接下来的使用中 会遇到编码问题 所以在使用这些字段时需要先转码,编写转码函数如下:

#转码函数
def changeCode(name):
 name = name.decode('GBK')
 
name = name.encode('UTF-8')
 
return name

四、解析excel文件并将其存储到sqlite

Python连接数据库 选取了Python自带的sqlite数据库 相对简单 在此不做太多介绍 如果大家对Python操作sqlite有疑惑的话 个人推荐菜鸟教程~

下面是解析excel文件并存入数据库,其中包含了判断单元格内容:

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):
 # 数据库
 createDataBase()
 database = sqlite3.connect("check.db")

 #文件类型
 wildcard = ".xls"

 list = getFileList(path,wildcard,1)

 nfiles = len(list[0])
 #文件名
 file = list[0]
 #时间
 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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能有所帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python计算三维矢量幅度的方法
Jun 15 Python
python实现Floyd算法
Jan 03 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
python文件及目录操作代码汇总
Jul 08 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
教你用python实现12306余票查询
Jun 30 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 #Python
Python字典简介以及用法详解
Nov 15 #Python
python xml解析实例详解
Nov 14 #Python
python入门基础之用户输入与模块初认识
Nov 14 #Python
详解Python多线程
Nov 14 #Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 #Python
Python端口扫描简单程序
Nov 10 #Python
You might like
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
最大K个数问题的Python版解法总结
2016/06/16 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Django admin美化插件suit使用示例
2017/12/12 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
详解Python 正则表达式模块
2018/11/05 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
中职生自荐信
2013/10/13 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python