Update card_creation.py

add utf8 encoding to csv read, add error handling in csv read
This commit is contained in:
Cal Corum 2023-02-26 00:33:02 -06:00
parent aed9debfc8
commit e1ce3ceed5

View File

@ -92,7 +92,7 @@ async def main(argv):
Process pitcher stats into raw chances
"""
count_pitchers = 0
with open(f'{input_path}pitcher-stats.csv', 'r') as file:
with open(f'{input_path}pitcher-stats.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader:
@ -1753,36 +1753,40 @@ async def main(argv):
lets_go = input(f'Should I run batters (y/n)? ')
if lets_go in YES:
# https://www.baseball-reference.com/leagues/majors/2022-baserunning-batting.shtml
with open(f'{input_path}baserunning-data.csv', 'r') as file:
with open(f'{input_path}baserunning-data.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader:
player = Player.get_or_none(Player.br_id == row[36])
if player:
dupe = BatterData.delete().where(
(BatterData.player == player) & (BatterData.cardset == cardset)
).execute()
try:
player = Player.get_or_none(Player.br_id == row[36])
if player:
dupe = BatterData.delete().where(
(BatterData.player == player) & (BatterData.cardset == cardset)
).execute()
stealing = b.stealing(
int(row[8]), int(row[12]), int(row[13]), int(row[14]), int(row[15]), season_pct
)
this_data = BatterData(
player=player,
cardset=cardset,
stealing=b.stealing_line(stealing),
st_low=stealing[0],
st_high=stealing[1],
st_auto=stealing[2],
st_jump=stealing[3],
running=b.running(row[26]),
hit_and_run='C',
bunting='C'
)
this_data.save()
stealing = b.stealing(
int(row[8]), int(row[12]), int(row[13]), int(row[14]), int(row[15]), season_pct
)
this_data = BatterData(
player=player,
cardset=cardset,
stealing=b.stealing_line(stealing),
st_low=stealing[0],
st_high=stealing[1],
st_auto=stealing[2],
st_jump=stealing[3],
running=b.running(row[26]),
hit_and_run='C',
bunting='C'
)
this_data.save()
else:
logging.error(f'Could not match bbref id {row[36]}')
print(f'Could not match bbref id {row[36]}')
else:
logging.error(f'Could not match bbref id {row[36]}')
print(f'Could not match bbref id {row[36]}')
except Exception as e:
logging.error(f'Failed to process runner {row[0]} ({row[2]}): {type(e)}: {e}')
print(f'Failed to process runner {row[0]} ({row[2]})')
existing_columns = CardColumns.delete().where(
CardColumns.id.endswith(f'-{cardset.id}') & CardColumns.b_ratings.is_null(False)
@ -1805,7 +1809,7 @@ async def main(argv):
# 'vr_two_2d6', 'vr_two_results', 'vr_two_splits',
# 'vr_three_2d6', 'vr_three_results', 'vr_three_splits']]
with open(f'{input_path}batter-stats.csv', 'r') as file:
with open(f'{input_path}batter-stats.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader:
@ -3257,67 +3261,71 @@ async def main(argv):
lets_go = input(f'Should I run fielders (y/n)? ')
if lets_go in YES:
# https://www.baseball-reference.com/leagues/majors/2022-specialpos_p-fielding.shtml
with open(f'{input_path}defense-p.csv', 'r') as file:
with open(f'{input_path}defense-p.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader:
player = Player.get_or_none(Player.br_id == row[29])
if player and row[15] != '' and row[12] != '':
# Build Position object and save
this_pos = Position(
player=player,
cardset=cardset,
position='P',
innings=int(float(row[8])),
range=d.range_pitcher(int(row[15]), season_pct),
error=d.error_pitcher(int(row[12]), int(row[9]), season_pct=season_pct),
)
dupe = Position.delete().where(
(Position.player == player) & (Position.cardset == cardset)
).execute()
this_pos.save()
spow, rpow = d.pow_ratings(d.innings_float(row[8]), int(row[6]), int(row[5]))
this_pit = PitcherData(
player=player,
cardset=cardset,
hold=d.hold_pitcher(row[27], int(row[28]), season_pct),
starter_rating=spow,
relief_rating=rpow
)
dupe = PitcherData.delete().where(
(PitcherData.player == player) & (PitcherData.cardset == cardset)
).execute()
this_pit.save()
if int(row[6]) >= int(row[5]) * .1:
sp_pos = Position(
try:
player = Player.get_or_none(Player.br_id == row[29])
if player and row[15] != '' and row[12] != '':
# Build Position object and save
this_pos = Position(
player=player,
cardset=cardset,
position='SP',
innings=int(float(row[8])) * (int(row[6]) / int(row[5])),
range=69,
error=420
position='P',
innings=int(float(row[8])),
range=d.range_pitcher(int(row[15]), season_pct),
error=d.error_pitcher(int(row[12]), int(row[9]), season_pct=season_pct),
)
sp_pos.save()
if int(row[6]) <= int(row[5]) * .8:
rp_pos = Position(
dupe = Position.delete().where(
(Position.player == player) & (Position.cardset == cardset)
).execute()
this_pos.save()
spow, rpow = d.pow_ratings(d.innings_float(row[8]), int(row[6]), int(row[5]))
this_pit = PitcherData(
player=player,
cardset=cardset,
position='RP',
innings=int(float(row[8])) * (1 - (int(row[6]) / int(row[5]))),
range=69,
error=420
hold=d.hold_pitcher(row[27], int(row[28]), season_pct),
starter_rating=spow,
relief_rating=rpow
)
rp_pos.save()
dupe = PitcherData.delete().where(
(PitcherData.player == player) & (PitcherData.cardset == cardset)
).execute()
this_pit.save()
# No player match
else:
logging.error(f'Could not match bbref id {row[29]}')
print(f'Could not match bbref id {row[29]}')
if int(row[6]) >= int(row[5]) * .1:
sp_pos = Position(
player=player,
cardset=cardset,
position='SP',
innings=int(float(row[8])) * (int(row[6]) / int(row[5])),
range=69,
error=420
)
sp_pos.save()
if int(row[6]) <= int(row[5]) * .8:
rp_pos = Position(
player=player,
cardset=cardset,
position='RP',
innings=int(float(row[8])) * (1 - (int(row[6]) / int(row[5]))),
range=69,
error=420
)
rp_pos.save()
# No player match
else:
logging.error(f'Could not match bbref id {row[29]}')
print(f'Could not match bbref id {row[29]}')
except Exception as e:
logging.error(f'Failed to process fielder {row[0]} ({row[2]}): {type(e)}: {e}')
print(f'Failed to process fielder {row[0]} ({row[2]})')
# https://www.baseball-reference.com/leagues/majors/2022-standard-pitching.shtml
with open(f'{input_path}pitcher-data.csv', 'r') as file:
with open(f'{input_path}pitcher-data.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader:
@ -3354,7 +3362,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[35]}')
print(f'Could not match bbref id {row[35]}')
with open(f'{input_path}defense-c.csv', 'r') as file:
with open(f'{input_path}defense-c.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = 'C'
@ -3383,7 +3391,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[34]}')
print(f'Could not match bbref id {row[34]}')
with open(f'{input_path}defense-1b.csv', 'r') as file:
with open(f'{input_path}defense-1b.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = '1B'
@ -3409,7 +3417,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[29]}')
print(f'Could not match bbref id {row[29]}')
with open(f'{input_path}defense-2b.csv', 'r') as file:
with open(f'{input_path}defense-2b.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = '2B'
@ -3437,7 +3445,7 @@ async def main(argv):
print(f'Could not match bbref id {row[29]} / player: {p_err} / row[27]: {row[25]} / '
f'row[20]: {row[18]}')
with open(f'{input_path}defense-3b.csv', 'r') as file:
with open(f'{input_path}defense-3b.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = '3B'
@ -3463,7 +3471,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[29]}')
print(f'Could not match bbref id {row[29]}')
with open(f'{input_path}defense-ss.csv', 'r') as file:
with open(f'{input_path}defense-ss.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = 'SS'
@ -3489,7 +3497,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[29]}')
print(f'Could not match bbref id {row[29]}')
with open(f'{input_path}defense-lf.csv', 'r') as file:
with open(f'{input_path}defense-lf.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = 'LF'
@ -3516,7 +3524,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[26]}')
print(f'Could not match bbref id {row[26]}')
with open(f'{input_path}defense-cf.csv', 'r') as file:
with open(f'{input_path}defense-cf.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = 'CF'
@ -3543,7 +3551,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[26]}')
print(f'Could not match bbref id {row[26]}')
with open(f'{input_path}defense-rf.csv', 'r') as file:
with open(f'{input_path}defense-rf.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
curr_pos = 'RF'
@ -3570,7 +3578,7 @@ async def main(argv):
logging.error(f'Could not match bbref id {row[26]}')
print(f'Could not match bbref id {row[26]}')
with open(f'{input_path}defense-of.csv', 'r') as file:
with open(f'{input_path}defense-of.csv', 'r', encoding='utf8') as file:
reader = csv.reader(file)
for row in reader: