Repository navigation
Expand file tree
/
Copy pathFastF1.py
More file actions
78 lines (67 loc) · 3.24 KB
/
Copy pathFastF1.py
File metadata and controls
78 lines (67 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import json
import datetime
import os
import time
import itertools
import fastf1 as f1
import pandas as pd
def write_dict_to_json(data, filename):
def convert_dataframes(obj):
"""
Helper function to convert Pandas DataFrames to a JSON-serializable format.
"""
if isinstance(obj, pd.DataFrame):
# Convert DataFrame to a list of dictionaries, handling NaNs and Timestamps
return obj.fillna('').map(lambda x: x.isoformat() if isinstance(x, pd.Timestamp) or isinstance(x, pd.Timedelta) or isinstance(x, datetime.datetime) else x).to_dict(orient='records')
elif isinstance(obj, dict):
# Recursively process nested dictionaries
return {k: convert_dataframes(v) for k, v in obj.items()}
elif isinstance(obj, pd.Timestamp) or isinstance(obj, pd.Timedelta) or isinstance(obj, datetime.datetime):
return obj.isoformat()
elif isinstance(obj, datetime.timedelta):
return str(obj)
else:
# Return other data types as is
return obj
try:
# Convert any DataFrames within the data to a JSON-serializable format
json_ready_data = convert_dataframes(data)
with open(filename, 'w') as f:
json.dump(json_ready_data, f, indent=4)
print(f"Successfully wrote data to {filename}")
except Exception as e:
print(f"An error occurred: {e}")
# years = [2024, 2023, 2022]
# circuits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
years = [2023]
circuits = [12]
# 'Practice 1', 'Practice 2', 'Practice 3', 'Sprint', 'Sprint Shootout', 'Sprint Qualifying', 'Qualifying', 'Race'
# identifiers = ['FP1', 'FP2', 'FP3', 'Q', 'S', 'SS', 'SQ', 'R']
identifiers = ['FP1', 'FP2', 'FP3', 'Q', 'R']
for circuit, year, identifier in itertools.product(circuits, years, identifiers):
try:
season = f1.get_session(year, circuit, identifier)
season.load(laps=True, telemetry=True, messages=True, weather=True)
# Be sure to load all the data
time.sleep(10)
print(f"\n {year} - {circuit} - {identifier} \n")
dir = f'./fastF1/{year}/{circuit}/{identifier}'
if not os.path.exists(dir):
print('Made directory')
os.makedirs(dir)
write_dict_to_json(season.laps, dir+'/laps.json')
write_dict_to_json(season.car_data, dir+'/car_data.json')
write_dict_to_json(season.pos_data, dir+'/pos_data.json')
write_dict_to_json(season.drivers, dir+'/drivers.json')
write_dict_to_json(season.track_status, dir+'/track_status.json')
write_dict_to_json(season.race_control_messages, dir+'/_race_control.json')
write_dict_to_json(season.results, dir+'/results.json')
write_dict_to_json(season.session_info, dir+'/session_info.json')
write_dict_to_json(season.session_start_time, dir+'/session_start_time.json')
write_dict_to_json(season.total_laps, dir+'/total_laps.json')
write_dict_to_json(season.weather_data, dir+'/weather.json')
write_dict_to_json(season.session_status, dir+'/session_status.json')
write_dict_to_json(season.t0_date, dir+'/t0_date.json')
except Exception as e:
print(e)
continue