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调用C/C++动态链接库的方法详解
Jul 22 Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
django接入新浪微博OAuth的方法
Jun 29 Python
Python3实现Web网页图片下载
Jan 28 Python
Python实现的爬虫功能代码
Jun 24 Python
pandas string转dataframe的方法
Apr 11 Python
python 美化输出信息的实例
Oct 15 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
python实现n个数中选出m个数的方法
Nov 13 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
基于Python实现nc批量转tif格式
Aug 14 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 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
如何编写jquery插件
2017/03/29 jQuery
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
跟老齐学Python之做一个小游戏
2014/09/28 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python实现购物程序思路及代码
2017/07/24 Python
python 有效的括号的实现代码示例
2019/11/11 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
毕业生优秀推荐信
2013/11/26 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
商超业务员岗位职责
2014/03/12 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
平安建设汇报材料
2014/12/29 职场文书
五一劳动节慰问信
2015/02/14 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书