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 相关文章推荐
深入讲解Java编程中类的生命周期
Feb 05 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
简单谈谈python中的语句和语法
Aug 10 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
在python中pandas的series合并方法
Nov 12 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python小白切忌乱用表达式
May 29 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
python中字符串的编码与解码详析
Dec 03 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 smarty模板引擎的6个小技巧
2014/04/24 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
小程序实现投票进度条
2019/11/20 Javascript
python获取多线程及子线程的返回值
2017/11/15 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
在python里从协程返回一个值的示例
2019/02/19 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python+pygame实现坦克大战
2019/09/10 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
优秀教师事迹简介
2014/02/02 职场文书
给小学生的新年寄语
2014/04/04 职场文书
无传销社区工作方案
2014/05/13 职场文书
本科生自荐信
2014/06/18 职场文书
超市店庆活动方案
2014/08/31 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers