-
Notifications
You must be signed in to change notification settings - Fork 0
/
extract.py
executable file
·64 lines (52 loc) · 2.18 KB
/
extract.py
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
"""Extract data on near-Earth objects and close approaches from CSV and JSON files.
The `load_neos` function extracts NEO data from a CSV file, formatted as
described in the project instructions, into a collection of `NearEarthObject`s.
The `load_approaches` function extracts close approach data from a JSON file,
formatted as described in the project instructions, into a collection of
`CloseApproach` objects.
The main module calls these functions with the arguments provided at the command
line, and uses the resulting collections to build an `NEODatabase`.
You'll edit this file in Task 2.
"""
import csv
import json
from models import NearEarthObject, CloseApproach
def load_neos(neo_csv_path="data/neos.csv"):
"""Read near-Earth object information from a CSV file.
:param neo_csv_path: A path to a CSV file containing data about near-Earth objects.
:return: A collection of `NearEarthObject`s.
"""
# Load NEO data from the given CSV file.
neos = []
with open(neo_csv_path, newline="") as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
neos.append(
NearEarthObject(
designation=row["pdes"],
name=row["name"],
diameter=row["diameter"],
hazardous=row["pha"].strip().lower() == "y",
)
)
return neos
def load_approaches(cad_json_path="data/cad.json"):
"""Read close approach data from a JSON file.
:param cad_json_path: A path to a JSON file containing data about close approaches.
:return: A collection of `CloseApproach`es.
"""
# Load close approach data from the given JSON file.
approaches = []
with open(cad_json_path, "r") as f:
data = json.load(f)
fields_name = data["fields"]
for item in data["data"]:
approaches.append(
CloseApproach(
designation=item[fields_name.index("des")],
time=item[fields_name.index("cd")],
distance=item[fields_name.index("dist")],
velocity=item[fields_name.index("v_rel")],
)
)
return approaches