一个Python的小工具

时间:2022-11-18 12:17:45
# -*- coding: utf-8 -*-


import os
import sys
import xlrd


##reload(sys)
##sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding()


FunKey = ['IGMP','VLAN','MAC','LACP','MSTP',u'端口定位']#全部的父目录


def deleteEnterkey(tmp):
    '''读取到的字符串,将回车符转换为空格'''
    rtn = ''
    for i in range (0,len(tmp)):
        if(tmp[i] == '\n'):
            rtn = rtn + ' '
        else:
            rtn = rtn + tmp[i]
    return rtn


def convert2normal(tmp):
    '''考虑文件名中存在‘:’(中文或英文),将‘:’转换为‘比’'''
    rtn = ''
    for i in range (0,len(tmp)):
        if((tmp[i] == ':') or (tmp[i] == u':')):
            rtn = rtn + u'比'
        else:
            rtn = rtn + tmp[i]
    return rtn


def createSuiteDir(suite_data):
    suite_path = '.'#os.getcwd()
    suite_module = ''
    manyDir = []
    manyDir = suite_data.split('/')
    dir_len = len(manyDir)
    for i in range (0,dir_len):
        for funDir in FunKey:
            if funDir == manyDir[i]:#建立父目录
                suite_module = funDir
                if not os.path.exists(funDir):
                    os.makedirs(funDir)
                suite_path = funDir
                for j in range (i+1,dir_len-1):#建立子目录
                    manyDir[j] = convert2normal(manyDir[j])#将目录中的特殊字符剔除,例如‘:’
                    suite_path = suite_path+'/'+manyDir[j]
                    if not os.path.exists(suite_path):
                        os.makedirs(suite_path)
    return suite_path,suite_module
               
def getSuiteData(suite_data):
    rtn = '没有找到suite'
    rtn = suite_data.split('/')[-1]#获取文件名称
    rtn = convert2normal(rtn)
    return rtn


filenamelist = os.listdir(os.getcwd())
for i in range (0,len(filenamelist)):
    if 'xls' in filenamelist[i]:
        print filenamelist[i]
        filename = filenamelist[i]


bk = xlrd.open_workbook(filename)


shxrange = range(bk.nsheets)


try:
    #sh = bk.sheet_by_name(u'第1页')
    sh = bk.sheets()[0]
except:
    print "no sheet named Sheet1" 


#获取列数、行数
ncols = sh.ncols
nrows = sh.nrows


print "all rows:%d, all cols:%d" % (nrows,ncols)


#第9/1列为文件编号


#第2/1列为文件名称


#第10/1列为文件描述,可以为空


#第12-15/1列为文件步骤,步骤个数不定




#获取数据suite_data和case_data
suite_list = []
case_list = []
for i in range(1,nrows):
    suite_data = getSuiteData(sh.cell_value(i,0))
    case_data_bianhao = sh.cell_value(i,8) #编号
    case_data_mingcheng = sh.cell_value(i,1) #名称
    case_data = case_data_bianhao + ' ' + case_data_mingcheng
    #print suite_data
    if suite_data == '':
        pass
    else:
        suite_list.append(suite_data)
        case_list.append(case_data)
        
##for row_num in range(1,nrows):
##    suite_data = getSuiteData(sh.cell_value(row_num,0))
##    suite_path = createSuiteDir(sh.cell_value(row_num,0))
##    filename = suite_data + '.txt'
##    #print filename
##    f = open(suite_path+'/'+filename, 'a+')#采用附加方式
##    f.close()


for i in range(len(suite_list)):
    print 'suite : ',suite_list[i]
    print 'case : ',case_list[i]




#获取suite包含的case个数
suite_num = []
cnt = 1
for i in range(len(suite_list)-1):
    if suite_list[i] == suite_list[i+1]:
        cnt = cnt + 1
    else:
        suite_num.append(cnt)
        cnt = 1
suite_num.append(cnt)
for i in range(len(suite_num)):
    print 'suite ',i+1,' 包含的case个数 : ',suite_num[i]


#定位不同suite,找到执行初始化(一次)的具体位置
suite_addnum = []
suite_addnum.append(1)
cnt = 0
for i in range(len(suite_num)-1):
    cnt = cnt + suite_num[i]
    suite_addnum.append(cnt+1)
for i in range(len(suite_num)):
    print 'suite ',i+1,' 初始化(一次)的位置 : ' ,suite_addnum[i] 
    
    
##开始大循环
suite_index = 0 #suite的个数累加
suite_cnt = 0 #suite初始化(一次)的位置变化
file_flag = 0 #suite初始化(一次)的标记


reload(sys)
sys.setdefaultencoding('utf-8')
for row_num in range(1,nrows):
    suite_data = getSuiteData(sh.cell_value(row_num,0))


##  创建suite文件
    if(suite_data != ''):
        suite_path,suite_module = createSuiteDir(sh.cell_value(row_num,0))#获取当前suite文件的目录路径
        suite_index = suite_index + 1
        if(suite_index == suite_addnum[suite_cnt]):
            file_flag = 1
            if(suite_cnt < (len(suite_num)-1)):#防止索引超限
                suite_cnt = suite_cnt + 1
        filename = suite_data + '.txt'
        print suite_path
        print filename
    f = open(suite_path+'/'+filename, 'a+')#采用附加方式
    
##  suite初始化(一次)
    if(file_flag == 1):
        file_flag = 0
        initContext = u'*** Settings ***  \n'
        initContext = initContext + u'Documentation     作者(姓名+工号):\n'
        case_doc = sh.cell_value(row_num,9) #文档描述
        case_doc2 = deleteEnterkey(case_doc)
        initContext = initContext + u'...               ' + case_doc2 + '\n'
        initContext = initContext + u'Test Setup        环境准备\n'
        initContext = initContext + u'Test Teardown     关闭所有连接\n'
        initContext = initContext + u'Force Tags        NOTC    TOPO:GPON(1+1+1)    MODULE:'+suite_module+'\n'
        initContext = initContext + u'Default Tags      STATE:调试\n'
        initContext = initContext + u'Resource          ../../'+suite_module+'(NetCard)用例相关资源和参数.txt\n'
        initContext = initContext + u'Resource          ../../'+suite_module+'(NetCard)用例相关关键字.txt\n'
        initContext = initContext + u'\n'
        initContext = initContext + u'*** Test Cases ***\n'
##        print type(initContext)
        initContext = initContext.encode('utf-8')
##        print type(initContext)
        f.writelines(initContext)
        
##  写入case
    case_bianhao = sh.cell_value(row_num,8)
    if(case_bianhao != ''):
        case_bianhao = sh.cell_value(row_num,8) #编号
        case_mingcheng = sh.cell_value(row_num,1) #名称
        case_data = case_bianhao + ' ' + case_mingcheng + '\n'
##        print type(case_data)
##        print case_data
        case_input = case_data.encode('utf-8')
##        print type(case_input)
##        print case_input
##        print '\n'
        f.writelines(case_input)
        
##  写入step
    step_num = sh.cell_value(row_num,11) #步骤
    step_num2 = deleteEnterkey(step_num)
    input_data = sh.cell_value(row_num,12) #输入
##    print type(input_data)
##    print input_data
##    print '\n'
    input_data2 = deleteEnterkey(input_data)
##    print input_data2
##    print '\n'
    output_data = sh.cell_value(row_num,13) #输出
    output_data2 = deleteEnterkey(output_data)
    comment_data = sh.cell_value(row_num,14) #备注
    comment_data2 = deleteEnterkey(comment_data)
##    step_data = '    log many    *---------- STEP '+step_num+' ----------*    '+input_data+'    '+output_data+'    '+comment_data+'\n'
    step_data = '    log many    *---------- STEP '+step_num2+' ----------*    '+input_data2+'    '+output_data2+'    '+comment_data2+'\n'
    step_input = step_data.encode('utf-8')
    f.writelines(step_input)
    
##  关闭suite文件
    f.close()