
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-06-20CDA 一级考试备考时长全解析,助你高效备考 CDA(Certified Data Analyst)一级认证考试,作为数据分析师领域的重要资格认证, ...
2025-06-20统计学模型:解锁数据背后的规律与奥秘 在数据驱动决策的时代,统计学模型作为挖掘数据价值的核心工具,发挥着至关重要的作 ...
2025-06-20Logic 模型特征与选择应用:构建项目规划与评估的逻辑框架 在项目管理、政策制定以及社会服务等领域,Logic 模型(逻辑模型 ...
2025-06-19SPSS 中的 Mann-Kendall 检验:数据趋势与突变分析的利器 在数据分析的众多方法中,Mann-Kendall(MK)检验凭借其对数据分 ...
2025-06-19CDA 数据分析能力与 AI 的一体化发展关系:重塑数据驱动未来 在数字化浪潮奔涌的当下,数据已然成为企业乃至整个社会发展进 ...
2025-06-19CDA 干货分享:统计学的应用 在数据驱动业务发展的时代浪潮中,统计学作为数据分析的核心基石,发挥着无可替代的关键作用。 ...
2025-06-18CDA 精益业务数据分析:解锁企业增长新密码 在数字化浪潮席卷全球的当下,数据已然成为企业最具价值的资产之一。如何精准地 ...
2025-06-18CDA 培训:开启数据分析师职业大门的钥匙 在大数据时代,数据分析师已成为各行业竞相争夺的关键人才。CDA(Certified Data ...
2025-06-18CDA 人才招聘市场分析:机遇与挑战并存 在数字化浪潮席卷各行业的当下,数据分析能力成为企业发展的核心竞争力之一,持有 C ...
2025-06-17CDA金融大数据案例分析:驱动行业变革的实践与启示 在金融行业加速数字化转型的当下,大数据技术已成为金融机构提升 ...
2025-06-17CDA干货:SPSS交叉列联表分析规范与应用指南 一、交叉列联表的基本概念 交叉列联表(Cross-tabulation)是一种用于展示两个或多 ...
2025-06-17TMT行业内审内控咨询顾问 1-2万 上班地址:朝阳门北大街8号富华大厦A座9层 岗位描述 1、为客户提供高质量的 ...
2025-06-16一文读懂 CDA 数据分析师证书考试全攻略 在数据行业蓬勃发展的今天,CDA 数据分析师证书成为众多从业者和求职者提升竞争力的重要 ...
2025-06-16数据分析师:数字时代的商业解码者 在数字经济蓬勃发展的今天,数据已成为企业乃至整个社会最宝贵的资产之一。无论是 ...
2025-06-16解锁数据分析师证书:开启数字化职业新篇 在数字化浪潮汹涌的当下,数据已成为驱动企业前行的关键要素。从市场趋势研判、用 ...
2025-06-16CDA 数据分析师证书含金量几何?一文为你讲清楚 在当今数字化时代,数据成为了企业决策和发展的重要依据。数据分析师这一职业 ...
2025-06-13CDA 数据分析师:数字化时代的关键人才 在当今数字化浪潮席卷全球的时代,数据已然成为驱动企业发展、推动行业变革的核心要素。 ...
2025-06-13CDA 数据分析师报考条件全解析 在大数据和人工智能时代,数据分析师成为了众多行业追捧的热门职业。CDA(Certified Data Analyst ...
2025-06-13“纲举目张,执本末从。”若想在数据分析领域有所收获,一套合适的学习教材至关重要。一套优质且契合需求的学习教材无疑是那关键 ...
2025-06-09