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)}

经验分享 程序员 微信小程序 职场和发展