• 1
  • 0
分享
  • Python 读取excel并转换为字典
  • 恬恬圈 2020-10-16 10:15:44 字数 3843 阅读 2128 收藏 0

方法一:利用利用xlrd读取excel文件

其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可。

1.安装 xlrd

pip install xlrd

2.读取文件,并进行格式转换

导入的excel表格的格式是这样的:

图1.png

解析后的格式为

 [{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}
    ]

这里只写出主要的代码段

# excel转dict
def excel_to_dict(self, *args, **kwargs):
    """
    excel转dict
    1.传来的文件可以是文件路径,也可以是二进制文件
    2.传来的可以是二进制文件,这里以django接收前端传来文件为例:
        接收用 request.FILES.get("fileName", None) 传入 my_file 即可
    kwargs接收的参数有:
        _sheet索引,0代表第一个表,1代表第二个表,默认0
        _max表格最大的行数,默认2000行
        _min表格最小的行数,默认1行
    """
    # excel 文件
    excel_file = self.__mark
    # sheet 索引
    _sheet = kwargs.get("sheet", 0)
    # max 最大条数
    _max = kwargs.get("max", 2000)
    # min 最小条数
    _min = kwargs.get("min", 0)
    # 判断是否为文件路径
    if os.path.exists(excel_file):
        workbook = xlrd.open_workbook(excel_file)
    else:
        # 上传的文件不保存,直接在内存中读取文件
        workbook = xlrd.open_workbook(filename=excel_file.name, file_contents=excel_file.read())
    # 根据sheet索引或者名称获取sheet内容
    data_sheet = workbook.sheets()[_sheet]
    # 获取sheet名称,行数,列数据
    sheet_name = data_sheet.name
    sheet_nrows = data_sheet.nrows
    sheet_ncols = data_sheet.ncols
    # 文件记录不得大于2000条
    if sheet_nrows > _max:
        return {"code": "0001", "msg": "文件记录大于{}条,请联系管理员上传".format(_max), "data": None}
    # 判断是否为空数据
    if sheet_nrows <= _min:
        return {"code": "0001", "msg": "空数据表格,停止导入", "data": None}
    # excel转dict
    get_data = []
    for i in range(1, sheet_nrows):
        # 定义一个空字典
        sheet_data = {}
        for j in range(sheet_ncols):
            # 获取单元格数据类型
            c_type = data_sheet.cell(i, j).ctype
            # 获取单元格数据
            c_cell = data_sheet.cell_value(i, j)
            if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                c_cell = int(c_cell)
            elif c_type == 3:
                # 转成datetime对象
                c_cell = datetime(*xlrd.xldate_as_tuple(c_cell, 0)).strftime('%Y-%m-%d %H:%M:%S')
            elif c_type == 4:
                c_cell = True if c_cell == 1 else False
            sheet_data[data_sheet.row_values(0)[j]] = c_cell
            # 循环每一个有效的单元格,将字段与值对应存储到字典中
            # 字典的key就是excel表中每列第一行的字段
            # sheet_data[self.keys[j]] = self.table.row_values(i)[j]
        # 再将字典追加到列表中
        get_data.append(sheet_data)
    # 返回从excel中获取到的数据:以列表存字典的形式返回
    return get_data

方法二:利用xToolkit库

1.安装方法:

pip install xToolkit  -i  http://pypi.douban.com/simple --trusted-host pypi.douban.com

xToolkit库是我自己封装的python内置库的一个扩展库.把python的datetime,string,list,dist,xthread等数据结构进行了功能的扩展。里面好用的功能比较多,可以前往 https://blog.csdn.net/qq_22409661/article/details/108531485 查看具体用法。

2.使用方法比较简单,一行代码即可搞定

xfile.read("./result/t_excel.xls").excel_to_dict()

导入的excel表格的格式是这样的:

图2.png

# excel转dict
# 1.传来的文件可以是文件路径,也可以是二进制文件
# 2.传来的可以是二进制文件,这里以django接收前端传来文件为例:
#     接收用 request.FILES.get("fileName", None) 传入 my_file 即可
# kwargs接收的参数有:
#     _sheet索引,0代表第一个表,1代表第二个表,默认0
#     _max表格最大的行数,默认2000行
#     _min表格最小的行数,默认1行
xfile.read("./result/t_excel.xls").excel_to_dict()
>> [{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
    {'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}
    ]


作者:燃灯工作室

原文链接:https://blog.csdn.net/qq_22409661/article/details/108654215#comments_13438548

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   软件开发过程中贯穿着缺陷的引入、发现、修复和关闭的过程,包含较多缺陷的软件通常都被认为是低质量的,但是软件测试并不能找出软件中存在的所有缺陷。因此对于缺陷的研究及分析能够更好地预防缺陷的引入,对软件的正常运行和软件质量改进具有重要的意义。  缺陷和模块属性的关联性分析是软件过程度量的一种方法,在实际软件开发过程中,我们发现缺陷与其所在的模块有着密切的联系,因此本文根据缺陷数量以及其所在模块属性进行缺陷分析,多维度深入地分析缺陷,从而提供更全面的缺陷分析。  一、软件缺陷属性  缺陷属性可为两类,一类为软件缺陷的常规属性,如缺陷类型、缺陷发现阶段、缺陷严重程度、缺陷来源等。一类为与缺陷相关的...
            0 0 1468
            分享
          •   相比于高大上的各种Selenium进阶指南,个人认为夯实基础至关重要,本文以一个个小案例的方式将KPI常用接口的使用进行归纳总结,有条件的同学可以自己练习几次,相信会有所收获。  鼠标操作  实现功能:百度页面->移动到‘设置’按钮->右键点击/鼠标双击/鼠标拖拽到元素松开。  ·首先导入ActionChains方法  ·使用格式:ActionChains(driver).操作(element).perform()  实现代码:from selenium import webdriver from time import&nbs...
            12 13 2483
            分享
          • 前言测试开发是近几年行业中一个流行词,既然是测试开发工程师,那么代码开发能力是最基本的要求,所以面试时必然少不了一些算法题考验你的编程功底。斐波那契数列?青蛙爬楼梯就是斐波那契数列的演化,解题思路一样。写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,   F(1) = 1  F(N) = F(N - 1) + F(N - 2), 其中 N ...
            0 0 2540
            分享
          •   谈到数据产品,很多时候有一种误解,认为这些产品无法通过自动化来进行测试。 尽管流水线的某些部分由于其实验性和随机性而无法通过传统的测试方法进行测试,但大部分流水线可以。 除此之外,更加不可预测的算法可以通过专门的验证过程。  让我们来看看传统的测试方法,以及我们如何将这些方法应用到我们的数据/ ML 流水线中。  测试金字塔  标准简化的测试金字塔如下所示:  这个金字塔表示您将为应用程序编写的测试类型。 我们从大量的单元测试开始,这些单元测试独立于其他功能来测试单个功能。 然后我们编写集成测试来检查将我们隔离的组件组合在一起是否按预期工作。 最后,我们编写 UI 或验收测试,从用户的角度...
            0 0 802
            分享
          • 背景近期团队打算做一个小程序自动化测试的工具,期望能够做到业务人员操作一遍小程序后,自动还原之前的操作路径,并且捕获操作过程中发生的异常,以此来判断这次发布是否会影响小程序的基础功能。上述描述看似简单,但是中间还是有些难点的,第一个难点就是如何在业务人员操作小程序的时候记录操作路径,第二个难点就是如何将记录的操作路径进行还原。自动化 SDK如何将操作路径还原这个问题,首选官方提供的 SDK: miniprogram-automator。小程序自动化 SDK 为开发者提供了一套通过外部脚本操控小程序的方案,从而实现小程序自动化测试的目的。通过该 SDK,你可以做到以下事情:控制小程序跳转到指定页...
            0 0 3624
            分享
      • 51testing软件测试圈微信