selenium实现excel文件数据的读、写
在进行软件测试或设计自动化测试框架时,一个不可避免的过程就是: 参数 化,在利用 python 进行自动化测试开发时,通常会使用 excel 来做数据管 理,利用 xlrd、xlwt 开源包来读写 excel。
一、环境安装
1.安装xlrd
pip install xlrd
2.安装xlwt
pip install xlwt
二、读取excel文件数据示例
让我们先看一个简单的 excel 读写示例,从表 1 中读取数据:
#-*- coding:utf-8 -*-
import xlrd
import xlwt
if __name__=="__main__":
#excel文件全路径
excelpath = r'F:\pycharm-workspace\selenium\test.xlsx'
#用于读取excel文件
tableopen = xlrd.open_workbook(excelpath)
#获取excel工作簿数
count = len(tableopen.sheets())
print u"工作簿数为%s"%count
#获取表数据的行、列数
table = tableopen.sheet_by_name('Sheet1')
h = table.nrows
l = table.ncols
print u"表数据的行数为%s,列数为%s"%(h,l)
# 循环读取数据
for i in range(0,h):
rowValues = table.row_values(i) #按行读取数据
# 输出读取的数据
for data in rowValues:
print data,' ',
print ''
- 执行结果:\
三、写入excel文件数据示例
注意这里的 excel 文件的后缀是 xls 如果是 xlsx 打开是会提示无效
# 注意这里的 excel 文件的后缀是 xls 如果是 xlsx 打开是会提示无效
excelpath = r'F:\pycharm-workspace\selenium\test2.xls'
wtbook = xlwt.Workbook()
#新增一个sheet工作表
sheet = wtbook.add_sheet('Sheet1',cell_overwrite_ok=True)
#写入数据头
headlist = [u'学号',u'姓名',u'班级']
row = 0
col = 0
#循环写
for head in headlist:
sheet.write(row,col,head)
col = col+1
for i in xrange(1,5):#行数限制,我这里写入4行数据
for j in xrange(1,3):#列数限制,因为我的headlist有三个数据,所以这里肯定是3列
#写入4行0~99的随机数
data = random.randint(0,99)
sheet.write(i,0,i)
sheet.write(i,j, data)
print u"写第[%d]行数据"%(i)
#保存
wtbook.save(excelpath)
- 执行结果:
open()用法
123456789101112131415161718192021222324# encoding:utf-8
try
:
# 写模式打开文件,若不存在该文件,则创建
out
=
open
(
"data.out"
,
"w"
)
# 默认为读模式,等价于out = open("data.out", "r")
# out = open("data.out")
# 追加+写模式
# out = open("data.out", "a+")
# 标准输出(通常是屏幕),使用file参数将数据写入到指定的文件
print
(
"blues stun easily"
,
file
=
out)
# 出现异常的类型很多,我们需要了解具体的异常信息,可以使用as err,将异常打印出来
except
IOError as err:
# 将err对象转换成字符串类型
print
(
"file error:"
+
str
(err))
# 无论try中的语句执行是否出问题,都会执行finally中的代码
finally
:
# 如果某些异常情况导致文件不存在,则会引发异常,所以想判断文件是否存在,存在则关闭文件
if
'data'
in
locals
():
# 记得一定要关闭
out.close()
关于Selenium 如何读取Txt、Excel、Csv..等文件以及如何获得我们想要的格式数据
一 、读取TXT文档
Txt算是比较简单的文档了,不多说直接上代码:
1.单独的关键字,直接读取
1
2
3
4
5
6
|
#coding utf-8 file_info = open ( 'Testing.txt' , 'r' ) values = file_info.readlines() file_info. close () for item in values : print item |
结果:
2.两列关键字,以‘,’逗号分隔
代码部分:
1
2
3
4
5
6
7
|
file_info = open ( 'Testing.txt' , 'r' ) values = file_info.readlines() file_info. close () for item in values : data1 = item.split( ',' )[0]#第一列 data2 = item.split( ',' )[1]#第二列 print data1, data2 |
结果如下:
Txt格式的是比较简单的,但是如果有多组数据呢?用spilt拆分就没那么方便了,因为以split方法一次只能将字符串拆分为两段,那么针对多组数据就要用到csv和excel啦。
二、读取csv文档
注意csv文档的建立最好是在excel中另存为——>选择csv格式,而不是直接改后缀。
读取csv文档我们需要引入csv库,即import csv
先看一下我们需要读取的文档:
OK,接下来我们要访问这些数据:
1
2
3
4
5
6
|
import csv #访问csv文件需要csv库的支持(本身自带),直接导入即可 my_file = 'Testing.csv' #文件名 values = csv.reader( open (my_file, 'rb' )) for item in values : print item #整行读 print item[0], item[1], item[2] #一个数据一个数据的读 |
使用item[Index]可以访问具体的那个数据,结果如下:
看起来不错,很能满足我们的需求,可以方便的读取多行多列数据,而且针对单个的数据访问也十分方便。但是,But…有些人可能试过,csv是不支持中文的,自己写进中文进去打开就有可能是一堆编码,那么Excel就登场了~
三、读取Excel文件
笔者个人觉得Excel是比较完美的,改进了CSV不支持中文的情况,好的,看一下我们的例子:
在Selenium使用Excel读取数据的话我们是需要下载Excel库文件的,即xlrd文件,下载链接:https://pypi.python.org/pypi/xlrd
下载完成解压,在当前目录cmd,输入python setup.py install即可安装成功,也可以直接cmd,输入pip命令:pip install xlrd
安装完成后,直接导入xlrd即可使用相关操作Excel的方法:
1
2
3
4
5
6
7
8
9
|
import xlrd my_file = xlrd.open_workbook( 'Testing.xls' )#得到文件 table = my_file.sheets()[0]#得到sheet页 nrows = table .nrows #总行数 ncols = table .ncols #总列数 i = 0 while i < nrows: print table .row_values(i)[0], table .row_values(i)[1] i = i+1 |
结果:
OK,Excel能够解决中文的问题,但是此处需要注意,不能直接读取整行的数据,只能将数据分开一个一个的读取,例如以上代码换成下面这样:
1
2
3
|
while i < nrows: print table .row_values(i) #读取整行 i = i+1 |
结果就会出现编码问题:
可能大家还注意到了,这里第二列的数字1990,在Selenium就变成了浮点型数字1999.0,之前看过一个解决办法是在Excel文档中,选中单元格,右键单元格格式——>文本.但是笔者发现这样并不能解决问题,至于数字目前笔者的解决办法是代码判断,如果是纯数字就转化为int型。
1
2
3
4
5
6
7
|
while i < nrows: cell = table .row_values(i)[1] #得到数字列数据 ctype = table .cell(i, 1).ctype #得到数字列数据的格式 if ctype == 2 and cell % 1 == 0: #判断是否是纯数字 cell = int (cell) #是纯数字就转化位 int 类型 print table .row_values(i)[0], cell i = i+1 |
接下来我们再看结果:
OK,这下圆满啦。
*注意:
1.csv或者excel格式的文件在最初设置数据的时候都要右键——>单元格格式——>文本
2.excel文件的格式必须是后缀名为*.xls
3.excel文档的ctype 分为5种,对应分别是:
empty: 0
string: 1
number:2
date: 3
boolean :4
error:5
selenium实现excel文件数据的读、写的更多相关文章
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- 上传读取Excel文件数据
/// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...
- VC6.0读取Excel文件数据
啰嗦一下:本人所在公司从事碟式斯特林太阳能发电设备的研发与销售.单台设备图如下: 工作原理如下:整个设备大致可分为五个部分, 1.服务器,负责气象.发电等数据存取,电.网连接等处理: 2.气象站,通过 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- ci框架读取上传的excel文件数据
原文链接: https://blog.csdn.net/qq_38148394/article/details/87921373 此功能实现使用到PHPExcel类库,PHPExcel是一个PHP类库 ...
- JAVA实现Excel导出数据(以写好的Excel模版导出)
工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...
- Excel文件数据导入到后台保存倒数据库
后台代码数据解析: 方法一: (简单点) import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermo ...
- day9 python学习 文件的操作 读 写 seek
文件的操作 1 文件的打开操作: 文件句柄 = open('文件路径', '模式') f=open('wangyakun','a+',encoding='utf-8') #文件名, 如果是绝对路径 ...
- java - 读取,导出 excel文件数据
首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...
随机推荐
- iOS开发之--png图片编译时报错 (Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with exit code 1 )
编译或者运行APP的时候,老是报这个错误:Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with ...
- 将UIView转成UIImage,将UIImage转成PNG/JPG
分类: UIImageView2013-03-12 17:37 350人阅读 评论(0) 收藏 举报 //UIView -> UIImage #import “QuartzCore/Quartz ...
- MySQL的system命令在渗透测试中的使用以及UDF提权
声明:下面引用关于SYSTEM的东西是自己之前的内容,是自己没有研究透导致的错误结论:有了错就要改,做技术的不能弄虚作假,时时刻刻要求自己要谨慎,虽然我的博客没人看,但是也要向所有已经看到的人道歉,错 ...
- Tiled地图编辑软件
Tiled官网: http://www.mapeditor.org/ 一个比较简单好用的地图编辑软件.百度可以找到很多教程. 在Egret中,官网提供了Tiled的工具类,但是教程和文档极少...只能 ...
- 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排
[BZOJ4517][Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值 ...
- [Java][Tomcat]在eclipse中运行tomcat报的一个错误
2008-11-9 16:27:59 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRule]{Se ...
- DocumentFragment 不支持 innerHTML
在需要多次使用 innerHTML 的地方,一般是推荐用 DocumentFragment 来缓存,最后一次性插入 body,从而减少浏览器的渲染,提高性能,不过最近也发现一个 bug: Docume ...
- CH5401 没有上司的舞会【树形DP】
5401 没有上司的舞会 0x50「动态规划」例题 描述 Ural大学有N名职员,编号为1~N.他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司.每个职员有一个快乐指数,用整数 H_i 给 ...
- 搜索R包和查看包的技巧
1.R怎么搜包 # 安装sos包 install.packages("sos") # 导入sos包 library(sos) # 使用函数findFn() 函数里面传入关键字来搜索 ...
- iass,pass,cass,sass,vm,container
分布式存储hdfs 大文件,swift 对象存贮. 为七牛的CDN系统目前大部分还不是自建的,采用的是整合其它CDN的方式做的.也就是说出了七牛的文件分发使用的是网宿和蓝汛的老牌CDN的分发节点,自身 ...