python处理excel实例01

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import re
import os
import xlwt
import xlrd
import linecache
import collections
import xml.dom.minidom as xmldom
from xlutils.copy import copy

FilePath="C:\\Users\\lwx566632\\Desktop\\rm\\fff.txt" #测试结果txt文件的路径
WritePath="C:\\Users\\lwx566632\\Desktop\\rm\\all_mp4sidedata1.xls" #标记测试结果的excel文件路径,文件后缀必须是xls
FilterFile="C:\\Users\\lwx566632\\Desktop\\rm\\filter_file.txt"

Filter_Sign="TEST|Segmentation|Aborted"
if_Filter=False

Case_Col='A' #excel中用例所在列(大写字母)
Input_Col='B' #标记测试结果(Pass或者fail)的列数(大写字母)

Url_Sign="TEST: The url is" #用例标识
Url_Pass_Sign="PASSSSSSSSSSSSSS" #用例成功标识
Url_Fail_Sign="FAILED" #用例失败标识
Url_Segmentation_Sign="Segmentation" #用例Segmentation标识
Url_Aborted_Sign="Aborted" #用例Aborted标识
Url_Fail_Result_Sign="TEST: Value of" #用例失败原因标识
Url_Fail_Result="of" #用例失败原因关键字,有多个关键字用'|'号隔开,例"ffmpeg|HMF"
Url_Fail_Result_Pos=1 #用例失败原因关键字处于行的位置,例如TEST:Value of [ffmpeg.streams[i].mediaInfo.vidInfo.profile] is: [-99]中[ffmpeg.streams[i].mediaInfo.vidInfo.profile]处于第2块

def parse_xml():
    with open(FilePath) as file:
        str1=file.read().split()
    CaseNum=collections.Counter(str1)['tests="1"'] #统计xml结果文件中记录的用例个数
    print CaseNum
    if True:
        xml_file = xmldom.parse(FilePath)
        eles = xml_file.documentElement
        for testcase in range(0,CaseNum):
            message=""
            messageNum=0
            suite=eles.getElementsByTagName("testsuite")[testcase]
            case=suite.childNodes
            caseName=case[1].getAttribute("name")
            caseResult=suite.getAttribute("failures")
            print "case: " + str(testcase+1)
            # print caseName
            print "testresult(0:pass 1:fail): " + caseResult
            if caseResult!=0:
                childNode=case[1].childNodes
                for child in childNode:
                    if child.nodeName=="failure":
                        message=message+"\n\r"+child.getAttribute("message")
                        messageNum+=1
                        if messageNum>5:
                            message="Too many questions"
                            break
                        # print message
                        # print "---------------------------------"
            Row=find_case(caseName)
            if Row!=0:
                write_XMLdata(Row, caseResult, message)
            
            print "================================"
    
    return 0

def find_case(name):
    # print "++"+name+"++"
    data = xlrd.open_workbook(WritePath) #打开excel文件
    table = data.sheets()[0] #根据sheet序号来获取excel中的sheet
    nrows = table.nrows #行数
    # print nrows
    col=ord(Case_Col)-ord('A')
    for rownum in range(1,nrows):
        row = table.row_values(rownum) #根据行号获取行
        if row: #如果行存在
            # print row
            # print "++"+row[col]+"++"
            row_data = row[col].encode('utf-8')
            # print "++"+row_data+"++"
            if row_data in name:
                print "Case in Excel row "+str(rownum+1)+": "+name
                return rownum
    os.system("echo "+name+">>NoTheseCaseInExcel.txt")
    return 0
    
def write_XMLdata(row, result, message):
    rb = xlrd.open_workbook(WritePath)
    wb = copy(rb)
    ws = wb.get_sheet(0)
    col=ord(Input_Col)-ord('A')
    if result=="0":
        # print "PASS-----"
        ws.write(row, col, "PASS")
    else:
        # print "FAIL-----"
        ws.write(row, col, "FAIL")
        ws.write(row, col+1, message)
    wb.save(WritePath)

def parse_txt():
    global current_url_path
    global current_url_result
    global fail_result_message
    current_url_path=""
    current_url_result="NoResult"
    fail_result_message=""
    Line_Num=0
    
    file=open(FilePath)
    for line in file:
        Line_Num+=1
        # print str(Line_Num)+"++"+line.strip()+"++"
        
        
        is_url=Url_Sign in line
        # print "is_url"+str(is_url)
        is_url_pass=Url_Pass_Sign in line
        # print "is_url_pass"+str(is_url_pass)
        is_url_fail=Url_Fail_Sign in line
        # print "is_url_fail"+str(is_url_fail)
        is_url_Segmentation=Url_Segmentation_Sign in line
        # print "is_url_Segmentation"+str(is_url_Segmentation)
        is_url_Aborted=Url_Aborted_Sign in line
        # print "is_url_Aborted"+str(is_url_Aborted)
        is_url_fail_result=Url_Fail_Result_Sign in line
        # print "is_url_fail_result"+str(is_url_fail_result)
        
        if current_url_path=="":
            if is_url:
                current_url_path=line.replace("\r","").replace("\n","")
                # print current_url_path
                current_url_result="NoResult"
        else:
            if is_url_pass:
                current_url_result="PASS"
            if is_url_fail:
                current_url_result="FAIL"
            if is_url_Segmentation:
                current_url_result="Segmentation"
                fail_result_message=fail_result_message+linecache.getline(FilePath,Line_Num-1)
            if is_url_Aborted:
                current_url_result="Aborted"
                fail_result_message=fail_result_message+linecache.getline(FilePath,Line_Num-1)
            if is_url_fail_result:
                if re.findall(Url_Fail_Result,line):
                    print line.split(':',3)[Url_Fail_Result_Pos]
                    if line.split(':',3)[Url_Fail_Result_Pos] not in fail_result_message:
                        fail_result_message=fail_result_message+line
                        # print fail_result_message
            if is_url:
                #结果写入excel
                Row=find_case(current_url_path)
                # print Row
                if Row:
                    print "++ "+current_url_result+"--"+current_url_path
                    write_TXTdata(Row, current_url_result, fail_result_message)
                #设置为当前用例
                current_url_path=line.replace("\r","").replace("\n","")
                # print current_url_path
                current_url_result="NoResult"
                fail_result_message=""
        # raw_input()
        
    #结果写入excel
    Row=find_case(current_url_path)
    # print Row
    if Row:
        print "++ "+current_url_result+"--"+current_url_path
        write_TXTdata(Row, current_url_result, fail_result_message)

def write_TXTdata(row, result, message):
    rb = xlrd.open_workbook(WritePath)
    wb = copy(rb)
    ws = wb.get_sheet(0)
    col=ord(Input_Col)-ord('A')
    ws.write(row, col, result)
    ws.write(row, col+1, message)
    wb.save(WritePath)                    

def filter():
    global FilePath
    file=open(FilePath)
    errorLog = open(FilterFile,'w')
    for line in file:
        if re.findall(Filter_Sign,line):
            errorLog.write((line.strip('\r\n')+'\n'))
    errorLog.close()
    file.close()
    FilePath=FilterFile
    return 0
    
if __name__ == "__main__":
    if if_Filter:
        filter()
    parse_txt()

 

 
posted @ 2023-04-23 22:47  jason8826  阅读(8)  评论(0)    收藏  举报