python自动化测试学习笔记-6excel操作xlwt、xlrd、xlutils模块

python中通过xlwt、xlrd和xlutils操作xls

  • xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件;
  • xlrd模块用于把本地xls文件加载到内存中,可以读取xls文件的表格数据,查询xls文件的相关信息;
  • xlwt可以生成xls文件,xlrd可以读取已经存在的xls文件,但是如果要修改本地已经存在的xls文件,就需要用到xlutils模块。
  • xlutils模块是xlrd和xlwt之间的桥梁,可以使用xlutils模块中的copy模块,拷贝一份通过xlrd读取到内存中的xls对象,就可以在拷贝对象上像xlwt中那样修改xls表格的内容,并保存到本地

要使用这些模块首先要安装导入:

pip install xlrd

pip install xlwt

pip install xluntils

安装好后进行导入

import xlrd
import xlwt
from xlutils.copy import copy
#创建一个excel
book=xlwt.Workbook()
#添加一个sheet
sheet=book.add_sheet('sheet1')
#向sheet中添加数据,行、列、value值
sheet.write(0,0,'id')
sheet.write(0,1,'name')
sheet.write(0,2,'age')
sheet.write(0,3,'sex')
#保存xls,微软的office不能以xlsx为结尾,wps随意
book.save('peitest.xls')

执行后生成了一个excel文件,查看内容

但是像这样一个单元格一个单元格的插入又很浪费时间,我们可以用循环来实现,如下:


##############################
#利用循环写数据
#创建一个excel
book=xlwt.Workbook()
#添加一个sheet
sheet=book.add_sheet('sheet2')
row=0
col=0
list=[
['id','name','age','sex'],
['01','wang','13','女'],
['02','li','23','女'],
['03','hang','34','男'],
['04','wu','16','女'],
['05','ma','22','女']
]
#循环行
for r in range(6):
#循环列
for c in range(4):
#根据行和列找到要赋值的value
sheet.write(r,c,list[r][c])
c+=1
r+=1
#保存excel
book.save('peitest.xls')

执行查看结果:

上述方法是已知数据的行和列来循环的,如果行和列太多的时候就不方便了,我们可以通过循环list来添加数据,如下:

#创建一个excel
book=xlwt.Workbook()
#添加一个sheet
sheet=book.add_sheet('sheet3')
list=[
['id','name','age','sex'],
['01','wang','13','女'],
['02','li','23','女'],
['03','hang','34','男'],
['04','wu','16','女'],
['05','ma','22','女']
]

r=0
for stu in list:
c=0
for s in stu:
sheet.write(r,c,s)
c+=1
r+=1
book.save('peitest.xls')

执行查看结果:

 

读取excel的数据是通过xlrd模块来实现的,如下:

###############################################################################
#读取excel数据
book=xlrd.open_workbook('peitest.xls')
#获取sheet,通过index
sheet=book.sheet_by_index(0)
#获取sheet通过sheet名称
#sheet=book.sheet_by_name('sheet3')
value=sheet.cell(0,0).value
value1=sheet.cell(0,1).value
value2=sheet.cell(0,2).value
value3=sheet.cell(0,3).value

print(value)
print(value1)
print(value2)
print(value3)

执行查看结果:

id
name
age
sex

同样的,如果我们要读取出excel所有的数据,也可以用循环来实现:

#####################################33
#循环来实现读取excel数据
#打开excel
book=xlrd.open_workbook('peitest.xls')
#获取sheet
sheet=book.sheet_by_name('sheet3')
#获取sheet中的行数
row=sheet.nrows
#获取sheet中的列数
col=sheet.ncols
#获取每一行的数据
for i in sheet.get_rows():
print(i)
#获取某一行的数据,通过循环获取出所有数据
for r in range(row):
print(sheet.row_values(r))
#获取某一列的数据,通过循环获取出所有数据
for c in range(col):
print(sheet.col_values(c))

执行查看结果:

[text:'id', text:'name', text:'age', text:'sex']
[text:'01', text:'wang', text:'13', text:'女']
[text:'02', text:'li', text:'23', text:'女']
[text:'03', text:'hang', text:'34', text:'男']
[text:'04', text:'wu', text:'16', text:'女']
[text:'05', text:'ma', text:'22', text:'女']
['id', 'name', 'age', 'sex']
['01', 'wang', '13', '女']
['02', 'li', '23', '女']
['03', 'hang', '34', '男']
['04', 'wu', '16', '女']
['05', 'ma', '22', '女']
['id', '01', '02', '03', '04', '05']
['name', 'wang', 'li', 'hang', 'wu', 'ma']
['age', '13', '23', '34', '16', '22']
['sex', '女', '女', '男', '女', '女']

我们看到上面第一种方法,每一个数据都带一个text,不方便进行后续操作,所以一般用第二种方式来实现。

修改文件

#######################################
import xlrd
import xlwt
from xlutils.copy import copy

#修改excel文件
#打开文件
book=xlrd.open_workbook('peitest.xls')
#复制一份文件用于修改
book2=copy(book)
#获取要修改的sheet
sheet=book2.get_sheet(0)
#修改指定的行和列
sheet.write(0,0,'序号')
#保存为新的excel
book2.save('peitest1.xls')

执行查看结果:

 

posted @ 2018-01-30 15:28  yingfeipei  阅读(1261)  评论(0编辑  收藏  举报