Collecting sprint race results using sprint_results.py
The sprint_results.py script fetches results from F1 sprint races, a shorter race format introduced in 2021 that awards points and determines grid positions.
Sprint races were introduced in 2021 and are only held at select events. Not all races have sprint data.
def get_race_info(self, season, round_num): """Get race information for the specified season and round""" events_file = self.base_dir / str(season) / "events.json" if not events_file.exists(): logger.warning(f"Events file not found for season {season}") # Try to fetch from API url = f"{self.base_url}/{season}/races.json" data = self.make_request(url) if ( data and "MRData" in data and "RaceTable" in data["MRData"] and "Races" in data["MRData"]["RaceTable"] ): races = data["MRData"]["RaceTable"]["Races"] for race in races: if race["round"] == str(round_num): return race return None try: with open(events_file, "r") as f: data = json.load(f) races = data["MRData"]["RaceTable"]["Races"] for race in races: if race["round"] == str(round_num): return race except Exception as e: logger.error(f"Error reading events file: {e}") return None
def get_sprint_results(self, season, round_num): """Get sprint results for a specific season and round""" url = f"{self.base_url}/{season}/{round_num}/sprint.json" return self.make_request(url)def fetch_sprint_for_round(self, season, round_num): """Fetch sprint results for a specific season and round""" logger.info(f"Fetching sprint results for season {season}, round {round_num}") # Create season directory season_dir = self.base_dir / str(season) os.makedirs(season_dir, exist_ok=True) # Get race information race = self.get_race_info(season, round_num) if not race: logger.warning( f"Race information not found for season {season}, round {round_num}" ) return False race_name = self.get_race_folder_name(race) # Check if race has a sprint if not self.has_sprint(race): logger.warning( f"No sprint for {race_name} (Round {round_num}) in season {season}" ) return False logger.info(f"Found sprint race: {race_name} (Round {round_num})") # Create race directory race_dir = season_dir / race_name os.makedirs(race_dir, exist_ok=True) # Get sprint results sprint_results = self.get_sprint_results(season, round_num) if sprint_results: sprint_results_path = race_dir / "sprint_results.json" return self.save_json(sprint_results, sprint_results_path) else: logger.warning( f"No sprint results found for {race_name} (Round {round_num})" ) return False
import jsonfrom pathlib import Pathseason = 2024events_file = Path(str(season)) / "events.json"with open(events_file) as f: data = json.load(f) races = data["MRData"]["RaceTable"]["Races"] sprint_races = [r for r in races if "Sprint" in r] print(f"Found {len(sprint_races)} sprint races in {season}") for race in sprint_races: print(f"Round {race['round']}: {race['raceName']}")