2025
This commit is contained in:
105
src/utils/sportspress.py
Normal file
105
src/utils/sportspress.py
Normal file
@@ -0,0 +1,105 @@
|
||||
from typing import List, Dict
|
||||
from pathlib import Path
|
||||
import csv
|
||||
|
||||
REQUIRED_KEYS=["date", "time", "field", "visitor", "home"]
|
||||
|
||||
def validate_keys(header: List[str]) -> bool:
|
||||
required_keys = REQUIRED_KEYS
|
||||
return all(key in header for key in required_keys)
|
||||
|
||||
def write_sportspress_csv(data: List[Dict], file: Path, only_with_outcome:bool = False):
|
||||
"""
|
||||
Writes sports event data to a CSV file in a specific format.
|
||||
|
||||
Parameters:
|
||||
- data (List[Dict]): List of dictionaries where each dictionary represents a sports event.
|
||||
- file_path (Path): The Path object representing the file path where the CSV file will be created.
|
||||
- only_with_outcome (bool, optional): If True, only events with outcomes will be included in the CSV. Default is False.
|
||||
|
||||
Returns:
|
||||
None
|
||||
|
||||
Example:
|
||||
>>> data = [...] # List of dictionaries representing sports events
|
||||
>>> file_path = Path("output.csv")
|
||||
>>> write_sportspress_csv(data, file_path)
|
||||
"""
|
||||
|
||||
header = data[0].keys()
|
||||
|
||||
if not validate_keys(header):
|
||||
raise KeyError(f"Missing Keys. Requires: {REQUIRED_KEYS}, provided: {list(header)}")
|
||||
|
||||
writer = csv.writer(file)
|
||||
|
||||
fieldnames = [
|
||||
"Format", #Competitive or Friendly
|
||||
# "Competition",
|
||||
"Season",
|
||||
# "Date Format",
|
||||
"Date",
|
||||
"Time",
|
||||
"Venue",
|
||||
"Team",
|
||||
"Results",
|
||||
"Outcome",
|
||||
# "Players",
|
||||
# "Performance",
|
||||
]
|
||||
|
||||
# Write the header
|
||||
writer.writerow(fieldnames)
|
||||
|
||||
# Write the data
|
||||
for row in data:
|
||||
if only_with_outcome and not row.get('has_result'):
|
||||
continue
|
||||
writer.writerow(
|
||||
[
|
||||
row["datetime"].strftime("%Y/%m/%d"),
|
||||
row["datetime"].strftime("%H:%M"),
|
||||
row.get("field", ""),
|
||||
row["home"],
|
||||
"|".join([str(row.get(k,"")) for k in [
|
||||
"home_runs_for_inning_1",
|
||||
"home_runs_for_inning_2",
|
||||
"home_runs_for_inning_3",
|
||||
"home_runs_for_inning_4",
|
||||
"home_runs_for_inning_5",
|
||||
"home_runs_for_inning_6",
|
||||
"home_runs_for_inning_7",
|
||||
"home_runs_for_inning_8",
|
||||
"home_runs_for_inning_9",
|
||||
"home_runs_for_inning_10",
|
||||
"home_runs_for",
|
||||
"home_errors",
|
||||
"home_hits"
|
||||
]]),
|
||||
row.get("home_outcome")
|
||||
]
|
||||
)
|
||||
writer.writerow(
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
row["visitor"],
|
||||
"|".join([str(row.get(k,"")) for k in [
|
||||
# "visitor_runs_for_inning_1",
|
||||
# "visitor_runs_for_inning_2",
|
||||
# "visitor_runs_for_inning_3",
|
||||
# "visitor_runs_for_inning_4",
|
||||
# "visitor_runs_for_inning_5",
|
||||
# "visitor_runs_for_inning_6",
|
||||
# "visitor_runs_for_inning_7",
|
||||
# "visitor_runs_for_inning_8",
|
||||
# "visitor_runs_for_inning_9",
|
||||
# "visitor_runs_for_inning_10",
|
||||
"visitor_runs_for",
|
||||
"visitor_errors",
|
||||
"visitor_hits"
|
||||
]]),
|
||||
row.get("visitor_outcome")
|
||||
]
|
||||
)
|
||||
Reference in New Issue
Block a user