Python 构建一个函数,读取excel,并返回一个字典

系统 1190 0

       在工作中,常常会遇到需要将excel 数据导入到数据库的场景。为了方便对数据进行清洗并写入数据库,所以希望能将每一行的数据以字典的形式存放起来,如同 [ {"id":1, "name": "张三"}, ] 这种形式。

       下面开始介绍如何进行。首先新建一个测试项目,项目中包含一个py 文件,用于写方法。还有一个待导入的excel 文件:

               Python 构建一个函数,读取excel,并返回一个字典_第1张图片

       excel 表的内容如下, 可以看见表格里面的内容较为简单。 Python 构建一个函数,读取excel,并返回一个字典_第2张图片     

以下是详细的代码及分析:

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论