excel 操作

openpyxl: .xlsx读写操作

安装:pip install openpyxl

测试数据:事先会写好在excel

平常操作excel的流程(3个对象):

    工作薄(Workbook)          wb = load_workbook(file_path)

    表单(Sheet)                     sh = wb["表单名称“]

    单元格(Cell)                    按行获取  sh.rows =》 list(sh.rows) == 列表的成员是元组;sh.columns: 所有列的对象

                                             cell(row=1,cloumn=2).value    #获取到某个单元格的值

import os   #导入os文件操作模块

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")  #获取当前文件绝对路径并在统计目录下新建文件“login_cases.xlsx”

from openpyxl import load_workbook           #导入openpyxl的load_workbook模块  

wb = load_workbook(file_path)            # 1、加载excel数据文件

sh = wb["login"]                       # 2、根据表单名称选择表单:wb['表单名称']

cel = sh.cell(2,2)               # 3、单元格对象:sh.cell(row,colum)  # 下标从1开始

# sh.max_row         # 总行数

# sh.max_column    # 总列数

在表单当中,获取单元格的数据: 

单元格对象:sh.cell(row,colum) # 下标从1开始 

点value获取单元格的值。 

修改数据:sh.cell(row,colum).value = 新的值  #等于重新赋值

保存数据(保存整个工作薄)

WorkBook对象(wb).save(文件路径)

wb.save("save_as_another_excel.xlsx")       #另存在括号里面的地址

保存到原文件的时候,需要注意:文件没有被占用(没有被打开),否则会被权限不允许的错误。

所有读取出来的数据:不是字符串就是数字

将表格中的数据转换成列表内嵌字典的形式:

按行读取数据: sh.rows = 所有行的数据。list(sh.rows)返回的是一个列表,列表当中的成员:每一个行的数据元组。

方法一:

import os

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")

# 1、加载excel数据文件

from openpyxlimport load_workbook

wb = load_workbook(file_path)

# 2、根据表单名称选择表单:wb['表单名称']

sh = wb["login"]

# 1、拿到字典的key值:

# print(list(sh.rows)[0])  # (, , )

titles = []

for itemin list(sh.rows)[0]:# 遍历第1行当中每一列

    titles.append(item.value)

print(titles)

data_lists = []

# 2、把key和value组合到一起,形成一个字典。再将字典,放到列表当中。

# # print(list(sh.rows))  # 每一个行是个元组,无组里放的是每一行的单元格。

for itemin list(sh.rows)[1:]:# 遍历每一行

    value_dict = {}# 每一行是一个字典。

    print(item)

for indexin range(len(item)):# 获取每一行的单元格数据

        print(index,item[index],item[index].value)

value_dict[titles[index]] = item[index].value

print(value_dict)

data_lists.append(value_dict)# 将每一行测试数据追加到列表当中。

print(data_lists)

方法2(使用打包函数zip方法):

zip函数基本使用方法:

li1 = ['user','passwd','check']

li2 = ["python27","lemonban66666",{"code":0,"msg":"登录成功"}]

res =zip(li1,li2)

print(dict(res))       

打印结果:{'user' :"python27" ,'passwd' :"lemonban66666" ,'check' :“{"code":0,"msg":"登录成功"} ”}

结合eval函数可以将字符串中的数据转成python语句执行

eval(字符串) 

eval(“ {"code":0,"msg":"登录成功"} ”)==》{"code":0,"msg":"登录成功"}

import os

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")

# 1、加载excel数据文件

from openpyxlimport load_workbook

wb = load_workbook(file_path)

# 2、根据表单名称选择表单:wb['表单名称']

sh = wb["login"]

all_datas = []# 获取excel表格当中所有的测试数据

# 1、拿到字典的key值:

# print(list(sh.rows)[0])  # (, , )

titles = []

for itemin list(sh.rows)[0]:# 遍历第1行当中每一列

    titles.append(item.value)

print(titles)

for itemin list(sh.rows)[1:]:# 遍历数据行

    values = []

for valin item:# 获取每一行的值

        values.append(val.value)

res =dict(zip(titles,values))# title和每一行数据,打包成字典

    res["check"] =eval(res["check"])# 将check的字符串,转换为字典对象。

    all_datas.append(res)# 追加到列表

print(all_datas)

结合ddt使用

@ddt         #定义类之前先引入模块

class TestLogin(unittest.TestCase):

@ddt(*all_datas)   #定义函数前先引入数据

def test_login(self,case):   #case接收all_datas,一般类里面的函数参数只有self

# 1、测试数据 # 2、测试步骤

        res = login_check(case["user"],case["passwd"])

# 3、断言:预期结果与实际结果的比对

        self.assertEqual(res,case["check"])

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355