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实现爬虫下载漫画示例
Feb 16 Python
跟老齐学Python之通过Python连接数据库
Oct 28 Python
Python数据类型学习笔记
Jan 13 Python
python 全文检索引擎详解
Apr 25 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
微信跳一跳游戏python脚本
Apr 01 Python
Django实现跨域请求过程详解
Jul 25 Python
Django Rest framework频率原理与限制
Jul 26 Python
python进程间通信Queue工作过程详解
Nov 01 Python
基于python实现雪花算法过程详解
Nov 16 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 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
Syphon 秘笈
2021/03/03 冲泡冲煮
推荐文章系统(一)
2006/10/09 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python中用于计算对数的log()方法
2015/05/15 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
小学数学课后反思
2014/04/23 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
内科护士节演讲稿
2014/09/11 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python