Python 读取文本格式的 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 OrderedDict
def 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] = value
f.close()
return valMap
def 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.0
errors.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_error
f.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)