• 1
  • 0
分享
  • Python 读取excel并转换为字典
  • 恬恬圈 2020-10-16 10:15:44 字数 3843 阅读 2253 收藏 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 1046
            分享
          • 读者提问:APP 兼容性测试怎么做 ?阿常回答:分为三步走:1、选取主流机型+版本;2、对主流机型做功能验证;3、选一款机型做网络兼容测试。一、选取主流机型 + 版本选取 TOP 机型+版本的几种途径:1、采用埋点的方式获取 APP 相关数据2、采用云测平台推荐的 TOP 机型+版本3、采用行业内统计的国内主流机型排行二、主流机型的功能验证选好主流机型,接着就是对每一款主流机型进行全功能验证。注意:如果 APP 需要使用到蓝牙、相册等手机自带功能,需要考虑软件与不同机型的蓝牙、相册等手机自带功能的兼容性。三、一款机型做网络测试挑选其中一款主流机型来做网络的兼容性测试。覆盖网...
            0 0 1360
            分享
          • 在测试多个web、移动端项目之后,总结一下功能测试中关键的测试点(自己简单整理,有问题请提出)web项目首页的检查主要包括url地址、页面展示、动画切换显示、首页图标、按钮或链接跳转、后退功能、刷新功能的测试(不要觉得累赘,第一次测试必须验证全,后面其他页面可以适当忽略一些测试点)文本框的检查一般文本框产品都会给出非常详细的限制规则,没有则需要主动询问。并提出不合理之处讨论主要包括以下几点(可以根据实际情况剔除多余测试点):正确输入,在限制条件内取几条用例进行正确值进行测试。一般最小、大边界值各一条,参数类型一条;未输入,在未输入内容的时候,检查显示是否正常;输入,在输入内容的时候,检查显示是...
            0 1 1611
            分享
          •   为什么做金融类软件测试  举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班少甚至基本没有,业务稳定。实在是测试类岗位中的香饽饽!  一、什么是金融行业  金融业是指经营金融商品的特殊行业,它包括银行业、保险业、信托业、证券业和租赁业。  往往涉及证券、银行、基金、信托、保险、投行、期货等领域。  二、金融行业的业务特点  随着金融行业的业务不断增加,金融交易模式的不断变化,金融机构对信息化的要求也越来越高,高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量,对金融行业软件的测试人员来说,也提出了更高的要求。  1. 金融行业的业务特点...
            1 1 1183
            分享
          •   1,名词解释  FPGA(Field-Programmable Gate Array),即现场可编程门阵列  以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局布线,快速的下载到 FPGA 上进行软件测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。  专用集成电路  英文全称:Application Specific Int...
            1 0 5930
            分享
      • 51testing软件测试圈微信