京公网安备 11010802034615号
经营许可证编号:京B2-20210330
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
在数据分析与建模中,“显性特征”(如用户年龄、订单金额、商品类别)是直接可获取的基础数据,但真正驱动业务突破的往往是 “ ...
2025-11-07在大模型(LLM)商业化落地过程中,“结果稳定性” 是比 “单次输出质量” 更关键的指标 —— 对客服对话而言,相同问题需给出一 ...
2025-11-07在数据驱动与合规监管双重压力下,企业数据安全已从 “技术防护” 升级为 “战略刚需”—— 既要应对《个人信息保护法》《数据安 ...
2025-11-07在机器学习领域,“分类模型” 是解决 “类别预测” 问题的核心工具 —— 从 “垃圾邮件识别(是 / 否)” 到 “疾病诊断(良性 ...
2025-11-06在数据分析中,面对 “性别与购物偏好”“年龄段与消费频次”“职业与 APP 使用习惯” 这类成对的分类变量,我们常常需要回答: ...
2025-11-06在 CDA(Certified Data Analyst)数据分析师的工作中,“可解释性建模” 与 “业务规则提取” 是核心需求 —— 例如 “预测用户 ...
2025-11-06在分类变量关联分析中(如 “吸烟与肺癌的关系”“性别与疾病发病率的关联”),卡方检验 P 值与 OR 值(比值比,Odds Ratio)是 ...
2025-11-05CDA 数据分析师的核心价值,不在于复杂的模型公式,而在于将数据转化为可落地的商业行动。脱离业务场景的分析只是 “纸上谈兵” ...
2025-11-05教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-05教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-04【2025最新版】CDA考试教材:CDA教材一级:商业数据分析(2025)__商业数据分析_cda教材_考试教材 (cdaglobal.com) ...
2025-11-04在数字化时代,数据挖掘不再是实验室里的技术探索,而是驱动商业决策的核心能力 —— 它能从海量数据中挖掘出 “降低成本、提升 ...
2025-11-04在 DDPM(Denoising Diffusion Probabilistic Models)训练过程中,开发者最常困惑的问题莫过于:“我的模型 loss 降到多少才算 ...
2025-11-04在 CDA(Certified Data Analyst)数据分析师的工作中,“无监督样本分组” 是高频需求 —— 例如 “将用户按行为特征分为高价值 ...
2025-11-04当沃尔玛数据分析师首次发现 “啤酒与尿布” 的高频共现规律时,他们揭开了数据挖掘最迷人的面纱 —— 那些隐藏在消费行为背后 ...
2025-11-03这个问题精准切中了配对样本统计检验的核心差异点,理解二者区别是避免统计方法误用的关键。核心结论是:stats.ttest_rel(配对 ...
2025-11-03在 CDA(Certified Data Analyst)数据分析师的工作中,“高维数据的潜在规律挖掘” 是进阶需求 —— 例如用户行为包含 “浏览次 ...
2025-11-03在 MySQL 数据查询中,“按顺序计数” 是高频需求 —— 例如 “统计近 7 天每日订单量”“按用户 ID 顺序展示消费记录”“按产品 ...
2025-10-31在数据分析中,“累计百分比” 是衡量 “部分与整体关系” 的核心指标 —— 它通过 “逐步累加的占比”,直观呈现数据的分布特征 ...
2025-10-31在 CDA(Certified Data Analyst)数据分析师的工作中,“二分类预测” 是高频需求 —— 例如 “预测用户是否会流失”“判断客户 ...
2025-10-31