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将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
学习python 之编写简单乘法运算题
Feb 27 Python
Python给你的头像加上圣诞帽
Jan 04 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
python实现人工智能Ai抠图功能
Sep 05 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
Python绘图实现台风路径可视化代码实例
Oct 23 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根据两点间的经纬度计算距离
2014/10/31 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php计算年龄精准到年月日
2015/11/17 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python魔术方法专题
2020/06/19 Python
python如何实现图片压缩
2020/09/11 Python
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
JAVA软件工程师测试题
2014/07/25 面试题
毕业生自荐信
2013/12/14 职场文书
高中历史教学反思
2014/02/08 职场文书
授权委托书范文
2014/07/31 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
Android自定义双向滑动控件
2022/04/19 Java/Android
springboot读取resources下文件的方式详解
2022/06/21 Java/Android