这篇文章,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。
目录
一、Python读取excel
1.1、安装xlrd库
1.2、打开excel工作簿
1.3、获取sheet工作表
1.4、操作row数据行
1.5、操作column数据列
1.6、操作单元格
二、读取excel数据保存到MySQL
2.1、完整代码
2.2、运行效果
一、Python读取excel
Python中操作excel文件有很多的库,这篇文章就介绍【xlrd】库读取excel文件,并且结合【pymysql】库将读取的表格数据插入到MySQL数据库里面。
1.1、安装xlrd库执行下面命令就可以安装xlrd依赖库:
pip install xlrd==1.2.0注意:这里安装的是xlrd1.2.0,不要安装太高的版本,有些高版本的xlrd已经不支持读取xlsx文件了。xlrd版本过高,运行时候会报错:
raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported') xlrd.biffh.XLRDError: Excel xlsx file; not supported 1.2、打开excel工作簿xlrd库中提供了【open_workbook()】和【open_workbook_xls()】两个方法,这里个方法的作用就是打开excel文件,获取到工作簿对象。
# 导入依赖库import xlrd# 读取excel文件workbook = xlrd.open_workbook(filename) 1.3、获取sheet工作表工作簿对象中,提供了【sheets()】方法,可以获取到所有的sheet工作表数组,可以通过索引获取指定的sheet页,也可以使用【sheet_by_index()】或者【sheet_by_name()】方法,通过索引或名称获取指定的sheet页表。
sheets()方法:获取所有sheet工作表对象。sheet_names()方法:获取工作簿中所有sheet页表的名称。sheet_by_index(idx)方法:根据索引获取sheet页表。sheet_by_name()方法:根据名称获取sheet页表。 # 导入依赖库import xlrd# 读取excel文件workbook = xlrd.open_workbook(filename)# 获取sheet工作表,获取第一个sheetsheets = workbook.sheets()[0] 1.4、操作row数据行 nrows属性:获取sheet工作表中有效的数据行数量。row_lens(index)方法:获取index行的长度,也就是单元格个数。row(index)方法:获取index行数据,数据以【单元格类型:单元格数据】的格式返回一个list列表。row_values(index)方法:获取指定行的所有单元格数据,返回一个[]列表。row_types(index)方法:获取指定行的所有单元格类型,返回一个[]列表。row_type类型有六种,分别如下所示: 0表示empty类型,空类型;1表示string字符串类;2表示number数值类型;3表示date日期类型;4表示boolean布尔类型;5表示error类型。 1.5、操作column数据列 ncols属性:获取sheet工作表中有效的列数。col_types(index)方法:获取index整列的单元格类型。col_values(index)方法:获取index整列的单元格数值。 1.6、操作单元格 value属性:Cell单元格对象可以调用value属性,获取对应的单元格数据。cell(row,col)方法:获取row行col列的单元格对象,以【单元格类型:单元格数据】格式返回。cell_type(row,col)方法:获取row行col列的单元格类型。cell_value(row,col)方法:获取row行col列的单元格数据。 二、读取excel数据保存到MySQL 2.1、完整代码 # 导入依赖库import xlrdimport pymysqlfrom xlrd import xldate_as_tuplefrom datetime import date# 定义变量filename = r'F:\import_data.xlsx'# 根据单元格类型,格式化数据def format_all(val, val_type, date_mode):if val_type == 0: # empty 空类型return ''if val_type == 1: # string字符串类型return valif val_type == 2: # number数值类型return format_num(val)if val_type == 3: # date日期类型return format_date(val, date_mode)if val_type == 4: # boolean布尔类型return valif val_type == 5: # error类型return valelse:return val# 格式化数字类型def format_num(num):if isinstance(num, int):return numif isinstance(num, float):num = str(num).rstrip('0') # 删除小数点后多余的0num = int(num.rstrip('.')) if num.endswith('.') else float(num) # 只剩小数点直接转int,否则转回floatreturn num# 格式化时间def format_date(dt, date_mode):return date(*xldate_as_tuple(dt, date_mode)[:3]).strftime('%Y-%m-%d')# 读取excel文件workbook = xlrd.open_workbook(filename)# 获取sheet工作表,获取第一个sheetsheets = workbook.sheets()[0]# 读取所有数据行rowsrows = sheets.nrows# 遍历每一行数据insertData = []for row in range(0, rows):rowData = sheets.row_values(row)rowType = sheets.row_types(row)# 数据类型格式化for index in range(0, len(rowData)):rowData[index] = format_all(rowData[index], rowType[index], workbook.datemode)insertData.append(rowData)print('待插入数据:', insertData)# 数据写入mysql数据库# 创建数据库连接conn = pymysql.connect(host='localhost', user='root', passwd='root', db='db-demo', charset='utf8')# 创建游标对象curses = conn.cursor()# 编写sql语句sql = 'INSERT INTO t_your_table (id, num, time, val) VALUES (%s, %s, %s, %s);'# 执行批量插入curses.executemany(sql, insertData)# 提交事务conn.commit()# 关闭连接curses.close()conn.close() 2.2、运行效果到此,Python读取excel数据插入到MySQL数据中就介绍完啦。
综上,这篇文章结束了,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。