字符串替换批量修改脚本
针对客户需求,会遇到测试用例中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前的空格是对齐需要,不影响实际修改