Python 构建一个函数,读取excel,并返回一个字典
在工作中,常常会遇到需要将excel 数据导入到数据库的场景。为了方便对数据进行清洗并写入数据库,所以希望能将每一行的数据以字典的形式存放起来,如同 [ {"id":1, "name": "张三"}, ] 这种形式。
下面开始介绍如何进行。首先新建一个测试项目,项目中包含一个py 文件,用于写方法。还有一个待导入的excel 文件:
excel 表的内容如下, 可以看见表格里面的内容较为简单。
以下是详细的代码及分析:
import os
import xlrd
from xlrd import xldate_as_datetime
def parse_excel():
# 打开文件,并获取第一个工作簿的内容
file_name = os.path.join(os.getcwd(), 学生信息表.xlsx)
work_book = xlrd.open_workbook(file_name)
work_sheet = work_book.sheet_by_index(0)
# 获取总行数
total_rows = work_sheet.nrows
# 定义一个列表,用于存放每一行的内容
data_list = []
key_list = None
for i in range(total_rows):
# 获取每一行的内容
row_data = work_sheet.row_values(i)
if i == 0:
# 将第一行的作为字典的key
key_list = row_data
else:
data_dict = dict()
for index, cel_data in enumerate(row_data):
# 获取字典的key
key = key_list[index]
# 注意点01 : 如果该单元格存放的是日期类型,读入的时候,需要借助 xldate_as_datetime 模块
# 具体的用法请自行百度
if index == 7:
if cel_data:
cel_data = xldate_as_datetime(cel_data, 0)
else:
# 注意点02: 单元格是数字的,读取时会识别为浮点数,特此处理一下
if isinstance(cel_data, float):
cel_data = int(cel_data)
# 字典赋值
data_dict[key] = cel_data
# 将字典加入需要返回的列表中
data_list.append(data_dict)
for data in data_list:
print(data)
if __name__ == __main__:
parse_excel()
打印出来的结果为:
{序号: 1, 学号: 2019090100001, 姓名: 张三, 年级: 一年级, 班级: 一班, 座位号: 1, 性别: 男, 出生日期: datetime.datetime(2012, 5, 1, 0, 0)} {序号: 2, 学号: 2019090100002, 姓名: 李四, 年级: 一年级, 班级: 一班, 座位号: 2, 性别: 男, 出生日期: datetime.datetime(2012, 3, 15, 0, 0)} {序号: 3, 学号: 2019090100003, 姓名: 王五, 年级: 一年级, 班级: 一班, 座位号: 3, 性别: 男, 出生日期: datetime.datetime(2012, 6, 3, 0, 0)} {序号: 4, 学号: 2019090100004, 姓名: 陈六, 年级: 一年级, 班级: 一班, 座位号: 4, 性别: 男, 出生日期: datetime.datetime(2012, 11, 12, 0, 0)} {序号: 5, 学号: 2019090100005, 姓名: 刘七, 年级: 一年级, 班级: 一班, 座位号: 5, 性别: 男, 出生日期: datetime.datetime(2012, 12, 6, 0, 0)} {序号: 6, 学号: 2019090100006, 姓名: 梅花, 年级: 一年级, 班级: 一班, 座位号: 6, 性别: 男, 出生日期: datetime.datetime(2011, 9, 8, 0, 0)} {序号: 7, 学号: 2019090100007, 姓名: 关九, 年级: 一年级, 班级: 一班, 座位号: 7, 性别: 男, 出生日期: datetime.datetime(2012, 10, 7, 0, 0)} {序号: 8, 学号: 2019090100008, 姓名: 赵八, 年级: 一年级, 班级: 一班, 座位号: 8, 性别: 女, 出生日期: datetime.datetime(2012, 4, 18, 0, 0)} {序号: 9, 学号: 2019090100009, 姓名: 燕十三, 年级: 一年级, 班级: 一班, 座位号: 9, 性别: 女, 出生日期: datetime.datetime(2011, 12, 28, 0, 0)} {序号: 10, 学号: 2019090100010, 姓名: 欧阳清, 年级: 一年级, 班级: 一班, 座位号: 10, 性别: 女, 出生日期: datetime.datetime(2012, 1, 25, 0, 0)} {序号: 11, 学号: 2019090100011, 姓名: 东门吹水, 年级: 一年级, 班级: 一班, 座位号: 11, 性别: 女, 出生日期: datetime.datetime(2012, 2, 12, 0, 0)} {序号: 12, 学号: 2019090100012, 姓名: 西门硝烟, 年级: 一年级, 班级: 一班, 座位号: 12, 性别: 女, 出生日期: datetime.datetime(2011, 12, 13, 0, 0)} {序号: 13, 学号: 2019090100013, 姓名: 西方失败, 年级: 一年级, 班级: 一班, 座位号: 13, 性别: 女, 出生日期: datetime.datetime(2012, 9, 5, 0, 0)}
