
Python解析excel文件存入sqlite数据库的方法
最近工作中遇到一个需求,需要使用Python解析excel文件并存入sqlite,本文就实现的过程做个总结分享给大家,文中包括数据库设计、建立数据库、Python解析excel文件、Python读取文件名并解析和将解析的数据存储入库,有需要的朋友们下面来一起学习学习吧。
一、建立数据库
根据需求建立数据库,建立了两个表,并保证了可以将数据存储到已有的数据库中,代码如下:
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能有所帮助
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA认证在国际市场上的认可度正在逐渐增长。CDA(Certified Data Analyst)认证,源自中国,面向全球,旨在提升数字化人才的数据 ...
2025-08-04本次活动市场价2000元,现面向会员免费开放,会员朋友更可以邀请一位非会员免费参加。 【活动目标】 ...
2025-08-04MySQL 统计连续每天数据:从业务需求到技术实现 在数据分析场景中,连续日期的数据统计是衡量业务连续性的重要手段 —— 无论是 ...
2025-08-04反向传播神经网络:突破传统算法瓶颈的革命性力量 在人工智能发展的历史长河中,传统算法曾长期主导着数据处理与模式识别领域 ...
2025-08-04CDA 数据分析师行业标准:构建数据人才的能力坐标系 在数据驱动决策成为企业核心竞争力的时代,CDA(数据分析师)行业标准作为 ...
2025-08-04评判两组数据与初始数据准确值的方法 在数据分析与研究中,我们常常会面临这样的情况:需要对通过不同方法、不同过程得到的两组 ...
2025-08-01通过 COX 回归模型诊断异常值 一、COX 回归模型概述 COX 回归模型,又称比例风险回归模型,是一种用于生存分析的统计方法。它能 ...
2025-08-01CDA 数据分析师报考条件详解:迈向专业认证的指南 在数据分析行业蓬勃发展的当下,CDA 数据分析师认证成为众多从业者提升专业 ...
2025-08-01K-S 曲线、回归与分类:数据分析中的重要工具 在数据分析与机器学习领域,K-S 曲线、回归和分类是三个核心概念与工具,它们各 ...
2025-07-31大数据时代对定性分析的影响 在大数据时代,海量、多样、高速且低价值密度的数据充斥着我们的生活与工作。而定性分析作为一 ...
2025-07-31CDA含金量分析 在数字经济与人工智能深度融合的时代,数据驱动决策已成为企业核心竞争力的关键要素。CDA(Certified Data Analys ...
2025-07-31SASEM 决策树:理论与实践应用 在复杂的决策场景中,如何从海量数据中提取有效信息并制定科学决策,是各界关注的焦点。SASEM 决 ...
2025-07-30SPSS 语法使用详解 在当今数据驱动的时代,SPSS( Statistical Package for the Social Sciences)作为一款功能强大的统计分析软 ...
2025-07-30人工智能对CDA数据分析领域的影响 人工智能对 CDA(Certified Data Analyst,注册数据分析师)数据分析领域的影响是全方位、多层 ...
2025-07-30MySQL执行计划中rows的计算逻辑:从原理到实践 MySQL 执行计划中 rows 的计算逻辑:从原理到实践 在 MySQL 数据库的查询优化中 ...
2025-07-29左偏态分布转正态分布:方法、原理与实践 左偏态分布转正态分布:方法、原理与实践 在统计分析、数据建模和科学研究中,正态分 ...
2025-07-29CDA 数据分析师的职业生涯规划:从入门到卓越的成长之路 在数字经济蓬勃发展的当下,数据已成为企业核心竞争力的重要来源,而 CD ...
2025-07-29CDA数据分析师证书考取全攻略 一、了解 CDA 数据分析师认证 CDA 数据分析师认证是一套科学化、专业化、国际化的人才考核标准, ...
2025-07-29解析神经网络中 Softmax 函数的核心作用 在神经网络的发展历程中,激活函数扮演着至关重要的角色,它们为网络赋予了非线性能力, ...
2025-07-29解析 response.text 与 response.content 的核心区别 在网络数据请求与处理的场景中,开发者经常需要从服务器返回的响应中提取数 ...
2025-07-29