字符串替换批量修改脚本

针对客户需求,会遇到测试用例中Counter名称改变的问题,此脚本主要解决批量Case文件修改Counter名称的问题,源码如下:

 

 1 #!/usr/bin/python
 2 # -*- coding:utf-8 -*-
 3 
 4 import sys,os
 5 import xlrd
 6 
 7 # 枚举当前目录下的所有.mp文件,并返回list
 8 def get_filename(): 
 9 #begin  
10     fileDir = "." + os.sep
11     L = []
12     for root, dirs, files in os.walk(fileDir):  
13         for file in files:
14             if os.path.splitext(file)[1] == '.mp':
15                 L.append(os.path.join(file))
16     #print L
17     return L  
18 #end                   
19                    
20 #通过读取Excel文件的方式获取旧的counter名称和新的counter名称,存为list
21 #并将所有get到的counter名称按照长度从大到小进行排序,防止短counter名称先替换
22 #实际执行中发现长counter名称包含短counter名称,而如果短counter先与长counter替换,则导致长counter无法替换
23 def get_countername():
24     fname = "counterfile\CounterNameAll.xls"
25     bk = xlrd.open_workbook(fname)
26     shxrange = range(bk.nsheets)
27     try:
28       sh = bk.sheet_by_name("Sheet1")
29     except:
30       print "no sheet in %s named Sheet1" % fname
31     #获取行数
32     nrows = sh.nrows
33     #获取列数
34     ncols = sh.ncols
35     print "nrows %d, ncols %d" % (nrows,ncols)
36 
37     counter_list = []
38     row_list = []
39     #获取各行数据
40     for i in range(0,nrows):
41       row_data = sh.row_values(i)
42       row_list.append(row_data)
43     #对get到的二维数组进行排序
44     row_list = sorted(row_list, key=lambda row:len(row[1]), reverse=True)  
45     for i in range(0,nrows):
46         for j in range(0,ncols):
47             counter_list.append(row_list[i][j].encode('utf-8'))
48     new_list = []
49     for count in counter_list:
50       new_list.append(count.replace('\xc2\xa0', ' '))
51     for i in range(0,len(new_list),2):
52       new_list[i] = ' '*(len(new_list[i+1])-len(new_list[i])) + new_list[i]
53     print new_list
54     return new_list  
55 
56 
57 
58 #把指定文件的内容替换的函数,多个环境参数并行替换,这样就可以一个脚本,多个通用。
59 def repip_func(file_path, counter_list):
60 
61   f = open(file_path,'r+')
62   all_the_lines = f.readlines()
63   f.seek(0)
64   f.truncate()
65   for line in all_the_lines:
66     i = 0
67     while i < len(counter_list):
68         line = line.replace(counter_list[i+1],counter_list[i])
69         i = i + 2
70     f.write(line)
71   f.close()
72 
73   #print "%s have replace ip %s" % (file_path, counter_list)
74 
75 def main():
76   repip_file_list = get_filename()
77   counter_list = get_countername()
78   for file_path in repip_file_list:
79     repip_func(file_path, counter_list)
80   #print counter_list
81 
82 if __name__ == "__main__":
83   main()

 

具体的使用文档:

Counter名称修改脚本使用手册:

1.将需要修改的counter名复制粘贴到Excel里,counter名称保存为n行2列,第一列为new counter名,第二列为old counter名,不需要表头,从(row1,col1)开始:

 

2.在CounterRename.py同级目录下新建counterfile文件夹,并将excel保存至counterfile文件夹内,如图:

 

3.在CounterRename.py中修改保存的excel名称:

 

4.将需要修改counter名称的文件放CounterRename.py同级目录下:

 

 5.在CounterRename.py中修改需要批量Rename的文件属性:

 

6.执行CounterRename.py脚本,即可完成修改。

 

 

注:

执行脚本时,控制台回打印从excel中获得的文件名,以方便检查,new_counter_name前的空格是对齐需要,不影响实际修改

 

posted @ 2017-08-27 14:57  DesperateCupid  阅读(637)  评论(0编辑  收藏  举报