前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一切的开始,测试学妹

一切的开始,测试学妹

作者头像
怪盗LYL
发布2022-06-13 11:20:24
3060
发布2022-06-13 11:20:24
举报
文章被收录于专栏:测试开发真货

作者是个菜鸡,毕业以后做的功能测试,闲暇时间自学了下Python,记得是前年九月份吧,在校友群遇到了同样的做测试的学妹,学妹公司让做一个判断文件的代码练练手,拿来修改了下,写了我印象中第一个和工作有些关系的脚本。

准备工作:

Python:3.8

xlrd:1.2.0

整体代码:

代码语言:javascript
复制
import time
import xlrd
import threading
#获取所有数据
# 数据形式为[第一行列表格式数据,第二行列表数据......]
def res_one(row,worksheet):
    z = [] #创建一个存放数据的列表
    for i in range(row):
        rowdate = worksheet.row_values(i)  # i行的list
        z.append(rowdate)
    return z
def sayhello(arg):
    workxls = xlrd.open_workbook(arg) #使用xlrd模块打开文件
    worksheet = workxls.sheet_by_name("Sheet1")  #获取sheet1页
    row = worksheet.nrows  # 获取总行数
    for i in range(row): #一行行去判断是否有修改
        rowdate = worksheet.row_values(i)  # i行的列表数据
        for a, b in enumerate(rowdate): #列出数据和数据下标,a为下标,b为数据
            # print(i, a, b)  # 第i行,a列,数据b
            if b != z[i][a]: #是否不同,不同进入判断
                print("有修改在:" + str(i + 1) + "行" + str(a + 1) + "列")  # 数列从0开始,加1方便阅读
                print("被修改值为:" + str(z[i][a]))
                print("修改后值为:" + str(b))
                print("修改时间为:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                z[i][a] = b  # 重置修改地方的数据判断为新的数据
            else:
                pass #相同略过
    t = threading.Timer(1.0, sayhello,[filepath]) #回调定位器,不写只会执行一次sayhello
    t.start()
def res(b, c):#对比两个数据是否不同
    if (b == c):
        return 0
    else:
        return 1
if __name__ == '__main__':
    # filepath= "test.xlsx" #所监控的文件地址可以是相对路径或者绝对路径
    filepath= "D:\\code\\python\\untitled\\test.xlsx" #所监控的文件地址可以是相对路径或者绝对路径
    workxls = xlrd.open_workbook(filepath) #使用xlrd模块打开文件
    worksheet = workxls.sheet_by_name("Sheet1") #获取sheet1页
    row = worksheet.nrows  # 获取总行数

    z = res_one(row,worksheet) #获取所有数据,数据形式为[第一行列表格式数据,第二行列表数据......]
    t = threading.Timer(1.0, sayhello,[filepath]) #线程定时器每隔一秒调用一次sayhello函数
    t.start() #开启线程

运行效果:

思路:

首先我们要打开Excel文件,我选择的是xlrd。安装方法使用了pip安装也可以在pycharm的设置里安装。注:最新版不支持xlsx所以指定了版本号为1.2.0。命令如下:

代码语言:javascript
复制
pip install xlrd==1.2.0

打开Excel文件获取数据。

代码语言:javascript
复制
if __name__ == '__main__':
    # filepath= "test.xlsx" #所监控的文件地址可以是相对路径或者绝对路径
    filepath= "D:\\code\\python\\untitled\\test.xlsx" #所监控的文件地址可以是相对路径或者绝对路径
    workxls = xlrd.open_workbook(filepath) #使用xlrd模块打开文件
    worksheet = workxls.sheet_by_name("Sheet1") #获取sheet1页
    row = worksheet.nrows  # 获取总行数

定义一个函数来获取所有数据。

代码语言:javascript
复制
def res_one(row,worksheet):
    z = [] #创建一个存放数据的列表
    for i in range(row):
        rowdate = worksheet.row_values(i)  # i行的list
        z.append(rowdate)
    return z

调用该函数。获取所有数据作为之后对比的依据。

代码语言:javascript
复制
z = res_one(row,worksheet) #获取所有数据,数据形式为[第一行列表格式数据,第二行列表数据......]

写一个对比函数对比每一个数据判断是否有变化。

代码语言:javascript
复制
def sayhello(arg):
    workxls = xlrd.open_workbook(arg) #使用xlrd模块打开文件
    worksheet = workxls.sheet_by_name("Sheet1")  #获取sheet1页
    row = worksheet.nrows  # 获取总行数
    for i in range(row): #一行行去判断是否有修改
        rowdate = worksheet.row_values(i)  # i行的列表数据
        for a, b in enumerate(rowdate): #列出数据和数据下标,a为下标,b为数据
            # print(i, a, b)  # 第i行,a列,数据b
            if b != z[i][a]: #是否不同,不同进入判断
                print("有修改在:" + str(i + 1) + "行" + str(a + 1) + "列")  # 数列从0开始,加1方便阅读
                print("被修改值为:" + str(z[i][a]))
                print("修改后值为:" + str(b))
                print("修改时间为:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                z[i][a] = b  # 重置修改地方的数据判断为新的数据
            else:
                pass #相同略过
    t = threading.Timer(1.0, sayhello,[filepath]) #回调定位器,不写只会执行一次sayhello
    t.start()

创建线程定时器定时调用,第一个参数为每隔一秒,第二个参数为所调用的函数,第三个为传递个函数的参数。

代码语言:javascript
复制
    t = threading.Timer(1.0, sayhello,[filepath]) #线程定时器每隔一秒调用一次sayhello函数
    t.start() #开启线程

后记:

第一次写公众号感觉无从下手,分享下我入门的脚本,这个脚本实际工作中我没用到所以有个致命问题我没有修改,这个脚本只适合固定行列的文件监控,如果新增行列会报错数组越界。欢迎读者自行修改,也可以增加通知功能如用smtplib模块发送邮件通知。

立秋了不知道大家有没有喝奶茶。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发真货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档