zoukankan      html  css  js  c++  java
  • python--excel操作插件openpyxl

    前言

    1. 数据驱动测试的核心就是数据与用例分离
    2. 数据保存可以使用 Excel,txt,数据库,html 等各种类型的文件
    3. .txt 文件操作使用内置的open()函数即可,操作可见文件操作
    4. 本篇博客介绍使用第三方插件 openpyxl 读取并操作 Excel 文件

    安装插件

    pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

    步骤

    1. 打开工作簿: 使用 load_workbook(file_path) ,file_path 必须存在,工作簿的后缀必须是 .xlsx 结尾
    2. 实例化: 工作簿名['表单名'] 定位Excel中的表单
    3. 获取值: 使用 WorkSheet.cell(横坐标, 纵坐标) 定位要操作的元素坐标,使用 .value 获取到对应坐标的值
    4. 修改值: 使用 WorkSheet.cell(x,y).value='up_value',将对应坐标的值修改为 up_value
    5. 保存: 修改完Excel文件,一定要保存文件:使用 实例对象.save('表单名') 保存文件

    示例:

    1. 需求如下:

    已有如下内容的excel文件,现要求将每行数据存入字典,key为表头,所有字典存入一个大列表中.

    1. 代码如下
    #!/usr/bin/env python 
    # -*- coding:utf-8 -*-
    from openpyxl import load_workbook
    
    class DoExcel:
        # 1)初始化数据参数:
        def __init__(self, file_path, sheet_name):
            '''
            每次调用函数就实例化文件
            :param file_path: excel 文件路径
            :param sheet_name: 表单名
            '''
            self.wb = load_workbook(file_path)
            self.sheet = self.wb[sheet_name]
    
        # _get_title 加_类似于私有函数, 只在内部调用
        def _get_title(self):
            '''
            :return: title 获取表头 list,作为key
            '''
            title = []
            # sheet.max_column  最大列
            # sheet.cell(1, i).value    循环取出第一行的值,存入列表
            for i in range(1, self.sheet.max_column + 1):
                title.append(self.sheet.cell(1, i).value)
            return title
    
        def get_finally_data(self):
            '''
            :return: finally_data,list格式
            '''
            title = self._get_title()
            finally_data = []   # 最终数据存入列表
            for j in range(2, self.sheet.max_row+1):    # 控制最大行
                row_data = {}   # 每一行数据存在字典中
                for i in range(1, self.sheet.max_column+1):     # 控制最大列
                    row_data[title[i-1]] = self.sheet.cell(j, i).value
                    ## 分解::
                    # key = title[i-1]  # 获取key值,注意 i-1
                    # value = self.sheet.cell(j, i).value
                    # row_data[key] = value
                finally_data.append(row_data)
            return finally_data
    
    
    if __name__ == '__main__':
        print(DoExcel('test_data.xlsx', 'parameter').get_finally_data())
    
    
    1. 执行结果

    注意事项

    1. 不要直接在pycharm中新建一个Excel文件!!!
    2. 如果涉及到写入数据,一定不要打开Excel文件,否则报PermissionError
    3. 文件名一定要带后缀名,后缀必须是 .xlsx
    4. AttributeError:'WorkSheet' object has no attribute 'save' 表单没保存的属性,工作簿有
    5. 文件名大小写敏感

    总结

    1. 上述代码仍有很多优化空间,如异常处理?回写数据处理?参数化如何处理等等
    2. 处理excel有很多插件,像python强大的数据分析工具pandas,但学会其中一种,达到你的需求即可.
  • 相关阅读:
    LeetCode
    LeetCode
    一篇真正教会你开发移动端页面的文章(一)
    移动端页面开发资源总结
    Vue 模板
    使用 concurrently 并行地运行多个命令(同时跑前端和后端的服务)
    值得H5前端学习的60个JS插件(含DEMO演示)
    解读浮动闭合最佳方案:clearfix
    JavaScript 如何工作的: 事件循环和异步编程的崛起 + 5 个关于如何使用 async/await 编写更好的技巧
    JavaScript 运行机制详解:再谈Event Loop
  • 原文地址:https://www.cnblogs.com/xiaohuboke/p/13617966.html
Copyright © 2011-2022 走看看