文章目录
- 前言
- golden 和 target 数据格式
- 程序
前言
Python 读取文本格式的 golden 和 target 数据对比并将报告写入到文本文件中
golden 和 target 数据格式
case1 result 0.2
case2 result 0.3
case3 result 0.35
case4 result 0.012
程序
import os
import sys
import math
import argparse
import pprint
from collections import OrderedDictdef CommandParser():parser = argparse.ArgumentParser()parser.add_argument('--golden', '-g', type=str, required=True, help='given ref(golden) file for analysis')parser.add_argument('--target', '-t', type=str, required=True, help='given target file for analysis')parser.add_argument('--out', '-o', type=str, required=False, default='anaysis_result.txt', help='output filename, default is "anaysis_result.txt"')return parser.parse_args()def readFile(file_name):valMap = OrderedDict()f = open(file_name)lines = f.readlines()for line in lines :line = line.strip('\n')line = line.split(' ')case = line[0]value = float(line[2])valMap[case] = valuef.close()return valMapdef generate_report(golden, target, file_name):f = open(file_name, 'w')errors = []f.write('{0:<30s} | {1:<8s} {2:<8s} | {3:<8s}\n'.format('case', 'golden', 'target', 'error'))for case in golden:gol = golden[case]if case not in target:f.write('{0:<30s} | {1:<8.3f} {2:<8s} | {3:<8s}\n'.format(case, gol, '--', '--'))else:tar = target[case]err = gol/tar - 1.0errors.append(err)f.write('{0:<30s} | {1:<8.3f} {2:<8.3f} | {3:<8.2%}\n'.format(case, gol, tar, err))mean = sum(errors)/len(errors)var = sum([pow(err-mean, 2) for err in errors]) / len(errors)std2 = 2.0*math.sqrt(var)max_error = max(errors)min_error = min(errors)outP5 = sum([1 if err > 0.05 else 0 for err in errors])outN5 = sum([1 if err <- 0.05 else 0 for err in errors])f.write('\n')f.write('mean : {0:8.2%}\n'.format(mean)) f.write('2sigma : {0:8.2%}\n'.format(std2)) f.write('max : {0:8.2%}\n'.format(max_error)) f.write('min : {0:8.2%}\n'.format(min_errorf.close()if __name__ == '__main__':args = CommandParser()if not os.path.exists(args.golden) : print(args.golden, " is not exit, please check it.")if not os.path.exists(args.target) : print(args.target, " is not exit, please check it.")golden = readFile(args.golden)target = readFile(args.target)#print(golden)#print(target)generate_report(golden, target, args.out)