当前位置:网站首页>一切的开始,测试学妹
一切的开始,测试学妹
2022-06-13 12:11:00 【怪盗LYL】
作者是个菜鸡,毕业以后做的功能测试,闲暇时间自学了下Python,记得是前年九月份吧,在校友群遇到了同样的做测试的学妹,学妹公司让做一个判断文件的代码练练手,拿来修改了下,写了我印象中第一个和工作有些关系的脚本。
准备工作:
Python:3.8
xlrd:1.2.0
整体代码:
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。命令如下:
pip install xlrd==1.2.0
打开Excel文件获取数据。
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 # 获取总行数
定义一个函数来获取所有数据。
def res_one(row,worksheet):
z = [] #创建一个存放数据的列表
for i in range(row):
rowdate = worksheet.row_values(i) # i行的list
z.append(rowdate)
return z
调用该函数。获取所有数据作为之后对比的依据。
z = res_one(row,worksheet) #获取所有数据,数据形式为[第一行列表格式数据,第二行列表数据......]
写一个对比函数对比每一个数据判断是否有变化。
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()
创建线程定时器定时调用,第一个参数为每隔一秒,第二个参数为所调用的函数,第三个为传递个函数的参数。
t = threading.Timer(1.0, sayhello,[filepath]) #线程定时器每隔一秒调用一次sayhello函数
t.start() #开启线程
后记:
第一次写公众号感觉无从下手,分享下我入门的脚本,这个脚本实际工作中我没用到所以有个致命问题我没有修改,这个脚本只适合固定行列的文件监控,如果新增行列会报错数组越界。欢迎读者自行修改,也可以增加通知功能如用smtplib模块发送邮件通知。
立秋了不知道大家有没有喝奶茶。
边栏推荐
- web开发者,web开发后台开发
- 产品故事|你所不知道的语雀画板
- 机器学习(三)— LDA(线性判别分析)理论与代码详解
- [tcapulusdb knowledge base] Introduction to tcapulusdb tcapsvrmgr tool (II)
- What if the second construction fails to pass the post qualification examination? This article tells you
- Lucene从入门到实战
- 秒云与趋动科技联合发布容器云平台与GPU资源池化整体解决方案
- How camunda uses script script nodes
- 论文翻译 | PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
- 面试题 Mysql 数据库
猜你喜欢
Kubernetes deploying ActiveMQ
2022年二建《建筑》参考答案汇总
[tcapulusdb knowledge base] Introduction to tcapulusdb tcapsvrmgr tool (I)
塔米狗股权项目分享:北京化大化新科技股份有限公司163.79万股股份转让
[benefits] in minutes
Books + videos + learning notes + skill improvement resource library, interview must ask
M1 体验win11
UNIX环境高级编程(APUE,第三版)---环境搭建
[tcapulusdb knowledge base] Introduction to tcapulusdb tcapsvrmgr tool (II)
树莓派开发笔记(十六):树莓派4B+安装mariadb数据库(mysql开源分支)并测试基本操作
随机推荐
SMS based on stm32f103+as608 fingerprint module +4x4 matrix key +sim900a - intelligent access control card system
[truth] the reason why big factories are not afraid to spend money is...
Mac MySQL installation tutorial
14、wpf之Border装饰器使用小记
杜邦分析法剖析:居然之家新零售集团股份有限公司企业财务分析
Auto.js 悬浮窗居中
OpenCV学习笔记(二):读取mnist数据集
UE4, ue5 phantom engine, command console command, parameter set
机器学习(二)—逻辑回归理论与代码详解
内部寄存器类型
如何使用 DATAX 以 UPSERT 语义更新下游 ORACLE 数据库中的数据?
【Scala】Scala常用代码库—六大特征与引用
[tcapulusdb knowledge base] Introduction to tcapulusdb table data caching
Based on STM32F103 - DS1302 date time + serial port printing
【福利】,分分钟搞定
How camunda uses script script nodes
Notes on the development of raspberry pie (16): Raspberry pie 4b+ install MariaDB database (MySQL open source branch) and test basic operations
Process of manually encrypting and burning the mass production firmware of ESP equipment
全网最全,含面试题+答案
Interview shock 56: what is the difference between clustered index and non clustered index?