#!/usr/bin/python3 # Shreya Sanghai (ssanghai@hmc.edu) 2/28/2022 import glob import re import csv import linecache import os def main(): data = [] curr_dir = os.path.dirname(os.path.abspath(__file__)) output_file = os.path.join(curr_dir,"..","Summary.csv") runs_dir = os.path.join(curr_dir,"..","runs/*/reports/wallypipelinedcore_qor.rep") # cruns_dir = "/home/ssanghai/Desktop/cleanRun/*/reports/wallypipelinedcore_qor.rep" search_strings = [ "Critical Path Length:", "Cell Area:", "Overall Compile Time:", "Critical Path Clk Period:", "Critical Path Slack:" ] for name in glob.glob(runs_dir): f = open(name, 'r') trimName = re.search("wallypipelinedcore_(.*?)_sky",name).group(1) output = {'Name':trimName} num_lines = len(f.readlines()) curr_line_index = 0 while curr_line_index < num_lines: line = linecache.getline(name, curr_line_index) for search_string in search_strings: if search_string in line: val = getVal(name,search_string,line,curr_line_index) output[search_string] = val curr_line_index +=1 data += [output] with open(output_file, 'w') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=['Name'] + search_strings) writer.writeheader() writer.writerows(data) def getVal(filename, search_string, line, line_index): data = re.search(f"{search_string} *(.*?)\\n", line).group(1) if data == '': #sometimes data is stored in two line data = linecache.getline(filename, line_index+1).strip() return data if __name__=="__main__": main()