接上篇
工具框架如图:
没有把全部配置表都写出来,这里拿出来几张配置表用来演示,全部写完有几十个 py 文件。
工具 Tools
XlsxReader.py 用来读取表格;
ConfigChecker.py 里用来写检查的逻辑;
ConfigBase.py 是所有配置表的父类,里面封装了一些常用的方法;
XlsxReader.py 代码
整个检测过程我只需要表的第一行用作表头,以及某一具体的列。所以只写了两个方法:
get_head_list()用来获得表头,
get_column_list_by_name()用来根据列名获得对应的列(列的第一行为列名)。
通常情况下表的前 3 行是有特殊用途的,所以不放入检查范围,self.ignore_lines 用来设定这个值。
具体代码
#coding=utf-8
import xlrd
xlsx_path = r"E:\***\Config"
class XlsxReader:
def __init__(self,xlsx_name):
self.path = xlsx_path
self.xlsx_name= xlsx_name
self.ignore_lines = 3;#忽略的行数,一般配置表前3行有特殊作用不做配置,所以读取数据时忽略这3行
self.xl = xlrd.open_workbook(self.path+"\\"+self.xlsx_name)
self.sheet = self.xl.sheet_by_index(0)
self.column_name_list = self.get_head_list() #得到表的列名(表头)
#得到列名也就是第一行(表头)
def get_head_list(self):
return self.sheet.row_values(0)
#通过列名得到某一列的数据
def get_column_list_by_name(self,name):
#把名字转换成index再通过self.sheet.col_values(index)得到整列数据
head_list = self.get_head_list()
if name in head_list:
index = head_list.index(name)
return self.sheet.col_values(index,self.ignore_lines)
else:
print("该配置表没有%s列"%name )
if __name__ == '__main__':
xlrd = XlsxReader("ChapterConfig.xlsx")
res = xlrd.get_column_list_by_name("id")
print(res)
结语:刚开始在 XlsxReader 里写了很多方法,用来获得某一行、某一列、某个单元格等等,后来发现没这个必要只需要两个方法就足够 了,万一要是有其他特殊需求再添加就可以了。