重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Excel中的日期转换
创新互联服务项目包括资源网站建设、资源网站制作、资源网页制作以及资源网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,资源网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到资源省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
此时需要调用xlrd的xldate_as_tuple模块或者xldate_as_datetime模块
xldate_as_tuble(date,mode),此函数有两个参数,第一个参数是excel的小数日期,xldate_as_tuple第二个参数有两种取值,0或者1,0是以1900-01-01为基准的日期,而1是1904-01-01为基准的日期。该函数返回的是一个元组,他的值类似:(year, month, day, hour, minute, nearest_second)
#导入包
import xlrd
#设置路径
path='C:\\Users\\jyjh\\Desktop\\datap.xlsx'
#打开文件
data=xlrd.open_workbook(path)
#查询工作表
sheets=data.sheets()
sheets
可以通过函数、索引、名称获得工作表。
sheet_1_by_function=data.sheets()[0]
sheet_1_by_index=data.sheet_by_index(0)
sheet_1_by_name=data.sheet_by_name(u'Sheet1')
可以通过方法获得某一列或者某一行的数值。
sheet_1_by_name.row_values(1)
sheet_1_by_name.col_values(1)
通过工作表的属性获得行数和列数。
n_of_rows=sheet_1_by_name.nrows
n_of_cols=sheet_1_by_name.ncols
也可以用一个循环来遍历一次文件。
for i in range(n_of_rows):
print sheet_1_by_name.row_values(i)
可以通过以下的任意一种方式访问单元格的数值。
cell_A1=sheet_1_by_name.cell(0,0).value
cell_A1=sheet_1_by_name.row(0)[0].value
cell_A1=sheet_1_by_name.col(0)[0].value
最后通过以下的方法对单元格的数值进行修改。
row=0
col=0
#ctype 0:empty,1:string,2:number,3:date,4:boolean,5:error
cell_type=1
value='Hello,Excel'
cell_A1=sheet_1_by_name.cell(0,0).value
format=0
sheet_1_by_name.put_cell(row,col,cell_type,value,format)
cell_A1=sheet_1_by_name.cell(0,0).value
Python[1] (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
7月20日,IEEE发布2017年编程语言排行榜:Python高居首位。
#读取多条测试用例
#1、导入requests模块
importrequests
#从 class_12_19.do_excel1导入read_data函数
fromdo_excel2 importread_data
fromdo_excel2 importwrite_data
fromdo_excel2 importcount_case
#定义http请求函数
COOKIE=None
defhttp_request2(method,url,data):
ifmethod=='get':
print('发起一个get请求')
result=requests.get(url,data,cookies=COOKIE)
else:
print('发起一个post请求')
result=requests.post(url,data,cookies=COOKIE)
returnresult #返回响应体
# return result.json() #返回响应结果:结果是字典类型:{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}
#从Excel读取到多条测试数据
sheets=['login','recharge','withdraw']
forsheet1 insheets:
max_row=count_case(sheet1)
print(max_row)
forcase_id inrange(1,max_row):
data=read_data(sheet1,case_id)
print('读取到第{}条测试用例:'.format(data[0]))
print('测试数据 ',data)
#print(type(data[2]))
#调用函数发起http请求
result=http_request2(data[4],data[2],eval(data[3]))
print('响应结果为 ',result.json())
ifresult.cookies:
COOKIE=result.cookies
#将测试实际结果写入excel
#write_data(case_id+1,6,result['code'])
write_data(sheet1,case_id+1,7,str(result.json()))
#对比测试结果和期望结果
ifresult.json()['code']==str(data[5]):
print('测试通过')
#将用例执行结果写入Excel
write_data(sheet1,case_id+1,8,'Pass')
else:
write_data(sheet1,case_id+1,8,'Fail')
print('测试失败')
# 导入load_workbook
fromopenpyxl importload_workbook
#读取测试数据
#将excel中每一条测试用例读取到一个列表中
#读取一条测试用例——写到一个函数中
defread_data(sheet_name,case_id):
# 打开excel
workbook1=load_workbook('test_case2.xlsx')
# 定位表单(test_data)
sheet1=workbook1[sheet_name]
print(sheet1)
test_case=[] #用来存储每一行数据,也就是一条测试用例
test_case.append(sheet1.cell(case_id+1,1).value)
test_case.append(sheet1.cell(case_id+1,2).value)
test_case.append(sheet1.cell(case_id+1,3).value)
test_case.append(sheet1.cell(case_id+1,4).value)
test_case.append(sheet1.cell(case_id+1,5).value)
test_case.append(sheet1.cell(case_id+1,6).value)
returntest_case #将读取到的用例返回
#调用函数读取第1条测试用例,并将返回结果保存在data中
# data=read_data(1)
# print(data)
#将测试结果写会excel
defwrite_data(sheet_name,row,col,value):
workbook1=load_workbook('test_case2.xlsx')
sheet=workbook1[sheet_name]
sheet.cell(row,col).value=value
workbook1.save('test_case2.xlsx')
#统计测试用例的行数
defcount_case(sheet_name):
workbook1=load_workbook('test_case2.xlsx')
sheet=workbook1[sheet_name]
max_row=sheet.max_row #统计测试用例的行数
returnmax_row
importcsv # 导入scv库,可以读取csv文件
fromselenium importwebdriver
importunittest
fromtime importsleep
importtime
importos
importHTMLTestRunner
importcodecs
importsys
dr =webdriver.Chrome()
classtestLo(unittest.TestCase):
defsetUp(self):
pass
deftest_login(self):
'''登陆测试'''
path ='F:\\Python_test\\'
# 要读取的scv文件路径
my_file ='F:\\pythonproject\\interfaceTest\\testFile\\ss.csv'
# csv.reader()读取csv文件,
# Python3.X用open,Python2.X用file,'r'为读取
# open(file,'r')中'r'为读取权限,w为写入,还有rb,wd等涉及到编码的读写属性
#data = csv.reader(codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore'))
with codecs.open(my_file, 'r', encoding='UTF-8',errors='ignore') as f:
data=csv.reader((line.replace('\x00','') forline inf))
# for循环将读取到的csv文件的内容一行行循环,这里定义了user变量(可自定义)
# user[0]表示csv文件的第一列,user[1]表示第二列,user[N]表示第N列
# for循环有个缺点,就是一旦遇到错误,循环就停止,所以用try,except保证循环执行完
print(my_file)
foruser indata:
print(user)
dr.get(' ')
# dr.find_element_by_id('input1').clear()
dr.find_element_by_id('input1').send_keys(user[0])
# dr.find_element_by_id('input2').clear()
dr.find_element_by_id('input2').send_keys(user[1])
dr.find_element_by_id('signin').click()
sleep(1)
print('\n'+'测试项:'+user[2])
dr.get_screenshot_as_file(path +user[3] +".jpg")
try:
assertdr.find_element_by_id(user[4]).text
try:
error_message =dr.find_element_by_id(user[4]).text
self.assertEqual(error_message, user[5])
print('提示信息正确!预期值与实际值一致:')
print('预期值:'+user[5])
print('实际值:'+error_message)
except:
print('提示信息错误!预期值与实际值不符:')
print('预期值:'+user[5])
print('实际值:'+error_message)
except:
print('提示信息类型错误,请确认元素名称是否正确!')
deftearDown(self):
dr.refresh()
# 关闭浏览器
dr.quit()
if__name__ =="__main__":
# 定义脚本标题,加u为了防止中文乱码
report_title =u'登陆模块测试报告'
# 定义脚本内容,加u为了防止中文乱码
desc =u'登陆模块测试报告详情:'
# 定义date为日期,time为时间
date =time.strftime("%Y%m%d")
time =time.strftime("%Y%m%d%H%M%S")
# 定义path为文件路径,目录级别,可根据实际情况自定义修改
path ='F:\\Python_test\\'+date +"\\login\\" + time + "\\"
# 定义报告文件路径和名字,路径为前面定义的path,名字为report(可自定义),格式为.html
report_path =path +"report.html"
# 判断是否定义的路径目录存在,不能存在则创建
ifnotos.path.exists(path):
os.makedirs(path)
else:
pass
# 定义一个测试容器
testsuite =unittest.TestSuite()
# 将测试用例添加到容器
testsuite.addTest(testLo("test_login"))
# 将运行结果保存到report,名字为定义的路径和文件名,运行脚本
report =open(report_path, 'wb')
#with open(report_path, 'wb') as report:
runner =HTMLTestRunner.HTMLTestRunner(stream=report, title=report_title, description=desc)
runner.run(testsuite)
# 关闭report,脚本结束
report.close()
csv文件格式:
备注:
使用python处理中文csv文件,并让execl正确显示中文(避免乱码)设施编码格式为:utf_8_sig,示例:
'''''
将结果导出到result.csv中,以UTF_8 with BOM编码(微软产品能正确识别UTF_8 with BOM存储的中文文件)存储
#data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#导出的结果不能别excel正确识别
data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')
1、用xlrd读取
对应方法如下,需要先import xlrd和numpy,通过row_start和row_end控制行数,通过column_start和column_end控制列数
这里要注意python是0-based索引,excel看的时候是1-based的索引
2、用pandas下的read_excel函数
dframe = pd.read_excel(“file_name.xlsx”)
dframe = pd.read_excel(“file_name.xlsx”, sheetname=”Sheet_name”)
dframe = pd.read_excel(“file_name.xlsx”, sheetname=number)
读取表格的方式有两种:
1、xlsread
[~,MeaDef,~]=xlsread(xls_site,table_tag,'B12:AI12');
这里输出是一个对应数字,一个对应字符串,一个是用元胞把所有数据放在一起
对应的xlswrite格式:
xlswrite(xls_site_output,train,1,['A',num2str(ix+1),':M',num2str(ix+1)])
2、read_table
VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值。它的基本语法为:
VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找)
下面以一个实例来介绍一下这四个参数的使用
例1:如下图所示,要求根据表二中的姓名,查找姓名所对应的年龄。
公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)
参数说明:
1 查找目标:就是你指定的查找的内容或单元格引用。本例中表二A列的姓名就是查找目标。我们要根据表二的“姓名”在表一中A列进行查找。
公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)
2 查找范围(VLOOKUP(A13,$B$2:$D$8,3,0) ):指定了查找目标,如果没有说从哪里查找,EXCEL肯定会很为难。所以下一步我们就要指定从哪个范围中进行查找。VLOOKUP的这第二个参数可以从一个单元格区域中查找,也可以从一个常量数组或内存数组中查找。本例中要从表一中进行查找,那么范围我们要怎么指定呢?这里也是极易出错的地方。大家一定要注意,给定的第二个参数查找范围要符合以下条件才不会出错:
A 查找目标一定要在该区域的第一列。本例中查找表二的姓名,那么姓名所对应的表一的姓名列,那么表一的姓名列(列)一定要是查找区域的第一列。象本例中,给定的区域要从第二列开始,即$B$2:$D$8,而不能是$A$2:$D$8。因为查找的“姓名”不在$A$2:$D$8区域的第一列。
B 该区域中一定要包含要返回值所在的列,本例中要返回的值是年龄。年龄列(表一的D列)一定要包括在这个范围内,即:$B$2:$D$8,如果写成$B$2:$C$8就是错的。
3 返回值的列数(B13 =VLOOKUP(A13,$B$2:$D$8,3,0))。这是VLOOKUP第3个参数。它是一个整数值。它怎么得来的呢。它是“返回值”在第二个参数给定的区域中的列数。本例中我们要返回的是“年龄”,它是第二个参数查找范围$B$2:$D$8的第3列。这里一定要注意,列数不是在工作表中的列数(不是第4列),而是在查找范围区域的第几列。如果本例中要是查找姓名所对应的性别,第3个参数的值应该设置为多少呢。答案是2。因为性别在$B$2:$D$8的第2列中。
4 精确OR模糊查找(VLOOKUP(A13,$B$2:$D$8,3,0) ),最后一个参数是决定函数精确和模糊查找的关键。精确即完全一样,模糊即包含的意思。第4个参数如果指定值是0或FALSE就表示精确查找,而值为1 或TRUE时则表示模糊。这里兰色提醒大家切记切记,在使用VLOOKUP时千万不要把这个参数给漏掉了,如果缺少这个参数默为值为模糊查找,我们就无法精确查找到结果了。
1、接下来,我们的任务是通过利用VLOOKUP函数来实现查找同学C的成绩。为此在单元格中输入“=VLOOKUP”,此时就会发现VLOOKUP包括三个参数和一个可选参数。
其中“lookup_value”是指要查找的值。
参数“table_array”是指搜索的区域,在此在除标题之后的整个数据区域。
第三个参数“col_index_num”是指整个函数返回单元格所在的列号。
2、最后以右括号结尾,并按回车键,就出现想要的结果啦。