import sys stats = {} for line in sys.stdin.xreadlines(): try: tuple = eval(line) except: # A few post-1992 files have bogus count information which # causes problems with the cwevent output. Just ignore such lines continue if tuple[3] == 0: offense = tuple[1] else: offense = tuple[0][:3] #if tuple[3] == 0: # defense = tuple[0][:3] #else: # defense = tuple[1] if offense not in stats.keys(): stats[offense] = { "games": [], "r": 0, "1b": 0, "2b": 0, "3b": 0, "hr": 0, "bb": 0, "ibb": 0, "hp": 0, "gdp": 0, "sh": 0, "sb2": 0, "cs2": 0, "sb3": 0, "cs3": 0, "po1" :0, "po2": 0, "roe": 0, "aoe": 0, "aoesb": 0, "adv": 0, "rso": 0, "extra": 0, "bases": 0, "1bnofield": 0, "1binfield": 0 } if tuple[0] not in stats[offense]["games"]: stats[offense]["games"].append(tuple[0]) if tuple[58] >= 4: stats[offense]["r"] += 1 if tuple[59] >= 4: stats[offense]["r"] += 1 if tuple[60] >= 4: stats[offense]["r"] += 1 if tuple[61] >= 4: stats[offense]["r"] += 1 # Event type is field 34 if tuple[34] == 20: stats[offense]["1b"] += 1 if tuple[46] == 0: stats[offense]["1bnofield"] += 1 elif tuple[46] >= 1 and tuple[46] <= 6: stats[offense]["1binfield"] += 1 if ((tuple[26] != "" and tuple[59] >= 3) or (tuple[27] != "" and tuple[60] >= 4)): stats[offense]["extra"] += 1 if tuple[26] != "" and tuple[59] == 3: stats[offense]["bases"] += 1 if tuple[26] != "" and tuple[59] >= 4: stats[offense]["bases"] += 1 if tuple[27] != "" and tuple[60] >= 4: stats[offense]["bases"] += 1 elif tuple[34] == 21: stats[offense]["2b"] += 1 if (tuple[26] != "" and tuple[59] >= 4): stats[offense]["extra"] += 1 stats[offense]["bases"] += 1 elif tuple[34] == 22: stats[offense]["3b"] += 1 elif tuple[34] == 23: stats[offense]["hr"] += 1 elif tuple[34] == 14: stats[offense]["bb"] += 1 elif tuple[34] == 15: stats[offense]["bb"] += 1 stats[offense]["ibb"] += 1 elif tuple[34] == 16: stats[offense]["hp"] += 1 elif tuple[34] == 18: stats[offense]["roe"] += 1 elif tuple[34] == 2 and (tuple[59] in [2, 3] or tuple[60] == 3) and tuple[59] < 4 and tuple[60] < 4 and tuple[61] < 4 and tuple[40] == 1: if tuple[38] == 'T': stats[offense]["sh"] += 1 else: stats[offense]["adv"] += 1 elif tuple[34] == 2 and (tuple[59] >= 4 or tuple[60] >= 4 or tuple[61] >= 4) and tuple[38] == 'F': stats[offense]["rso"] += 1 if tuple[29].find("/GDP") > 1: stats[offense]["gdp"] += 1 # Field 51 is number of errors. # Two ways to get an advance-on-error: # There's an error, but not one on which the batter reached if tuple[51] > 0 and tuple[34] != 18 and tuple[34] != 13: if tuple[34] == 4 or tuple[34] == 6: stats[offense]["aoesb"] += 1 else: stats[offense]["aoe"] += 1 # The batter reaches on an error, and *another* error occurs also elif tuple[51] > 1: stats[offense]["aoe"] += 1 # This is written so that POSB and POCS are not counted as # runners picked off if tuple[67] == 'T': stats[offense]["sb3"] += 1 elif tuple[70] == 'T': stats[offense]["cs3"] += 1 elif tuple[73] == 'T': stats[offense]["po2"] += 1 if tuple[66] == 'T': stats[offense]["sb2"] += 1 elif tuple[69] == 'T': stats[offense]["cs2"] += 1 elif tuple[72] == 'T': stats[offense]["po1"] += 1 for key in stats.keys(): print ("%s,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d" % (sys.argv[1], key, len(stats[key]["games"]), stats[key]["r"], stats[key]["1b"], stats[key]["2b"], stats[key]["3b"], stats[key]["hr"], stats[key]["bb"], stats[key]["ibb"], stats[key]["hp"], stats[key]["gdp"], stats[key]["sb2"], stats[key]["cs2"], stats[key]["po1"], stats[key]["sb3"], stats[key]["cs3"], stats[key]["po2"], stats[key]["roe"], stats[key]["aoe"], stats[key]["aoesb"], stats[key]["adv"], stats[key]["sh"], stats[key]["rso"], stats[key]["extra"], stats[key]["bases"], stats[key]["1bnofield"], stats[key]["1binfield"] ))