背景:最近有个测试项目,系统会生成excel 文件,文件内有一列是加密串,要求生成的这个加密串不能包含数字0,1,大写字母“I”,“O”,想着要是有10000条数据,一个个的看…嗯!这样对眼睛不太友好,所以写个简单的校验脚本
1.excel格式如下图:
2.思路
·先去excel取出数据,这里继续用openpyxl,因为数据列是固定在第二列,所以列写死是2,行循环下就可以了
·定义一个列表,将取出的数据一个个追加到列表里
·再循环取出列表里的值,对值进行了一个str转换,转换成字符串(备注:这里貌似不用str转,稳妥点我还是保留了)
·已经将单个的数据取出来了,并且是str类型,那么就可以直接用str类型数据的特性,直接判断不需要的字符在不在里面(需求要求不能包含数字0,1,大写字母“I”,“O”)
3.代码如下(总觉得那里需要优化下,但一直没想到)
import openpyxl
class CleckString:
def get_sheet1(self):
file_name = "D:\\xxxxx\\xxxx.xlsx"
data = openpyxl.load_workbook(file_name)
sheet = data['Sheet1']
return sheet
def secret_key_content(self):
sheet = self.get_sheet1()
content_list = []
# row 行
# col 列
max_rows = sheet.max_row
for m_row in range(0, int(max_rows)):
cell_content = sheet.cell(int(m_row)+1, 2).value
content_list.append(cell_content)
return content_list
def cleck_key_content(self):
content = self.secret_key_content()
for i in range(0, len(content)):
aa = str(content[i])
# print(aa)
# print(len(aa))
if aa.isupper(): # 判断字符串中都是大写
if len(aa) == 19:
if '1' in aa:
c1 = "\n卡密中存在数字“1”,与需求不符,卡密号:%s\n第%s条数据" % (content[i], i+1)
print(c1)
elif 'I' in aa:
c2 = "\n卡密中存在大写“I”,与需求不符,卡密号:%s\n第%s条数据" % (content[i], i+1)
print(c2)
elif '0' in aa:
c3 = "\n卡密中存在大写“0”,与需求不符,卡密号:%s\n第%s条数据" % (content[i], i+1)
print(c3)
elif 'O' in aa:
c4 = "\n卡密中存在大写“O”,与需求不符,卡密号:%s\n第%s条数据" % (content[i], i+1)
print(c4)
else:
print("卡密不是19位,与需求不符,卡密号:%s\n第%s条数据" % (content[i], i + 1))
else:
print("卡密中有小写字母与需求不符,卡密号:%s\n第%s条数据" % (content[i], i+1))
else:
print("\n生成的卡密符合需求要求")
if __name__ == '__main__':
a = CleckString()
a.cleck_key_content()