-
Notifications
You must be signed in to change notification settings - Fork 0
/
openflights.py
89 lines (64 loc) · 2.27 KB
/
openflights.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import csv
from enum import Enum
from model import Airport
from model import Plane
OPENFLIGHTS_ROOT = "openflights/"
class AirportKeys(Enum):
id = 0
name = 1
city = 2
country = 3
iata = 4
icao = 5
lat = 6
lon = 7
alt = 8
tmz = 9
class PlanesKeys(Enum):
name = 0
iata = 1
icao = 2
all_keys = {"airports": {x.name: x.value for x in AirportKeys}, "planes": {x.name: x.value for x in PlanesKeys}}
def _read_csv(filename):
with open(OPENFLIGHTS_ROOT + filename, "r") as csv_file:
csv_reader = csv.reader(csv_file)
csv_matrix = []
for row in csv_reader:
csv_matrix.append(row)
for j in range(0, len(csv_matrix[-1])):
elem = ""
split = str(csv_matrix[-1][j]).split(" ")
for word in split:
if word == "":
break
elem += word + " "
csv_matrix[-1][j] = elem[:-1]
return csv_matrix
def _read_airports(as_dict=False):
csv_matrix = _read_csv("airports.csv")
airports_dict = {}
for row in csv_matrix:
airports_dict[row[AirportKeys.iata.value]] = {x.name: row[x.value] for x in AirportKeys}
return airports_dict if as_dict else {key: _parse_airport(airport) for key, airport in airports_dict.items()}
def _read_planes(as_dict=False):
csv_matrix = _read_csv("planes.csv")
planes_dict = {}
for row in csv_matrix:
planes_dict[row[PlanesKeys.iata.value]] = {x.name: row[x.value] for x in PlanesKeys}
return planes_dict if as_dict else {key: _parse_plane(plane) for key, plane in planes_dict.items()}
def _parse_plane(plane):
return Plane(plane[PlanesKeys.name.name], 0., 0., 0., 0., 0.)
def _parse_airport(airport):
lat = float(airport[AirportKeys.lat.name])
lon = float(airport[AirportKeys.lon.name])
iata = airport[AirportKeys.iata.name]
name = airport[AirportKeys.name.name]
country = airport[AirportKeys.country.name]
city = airport[AirportKeys.city.name]
try:
tmz = float(airport[AirportKeys.tmz.name])
except ValueError:
tmz = 0
return Airport(lat, lon, 0., 0., iata, name, {"country": country, "city": city, "tmz": tmz})
airports = _read_airports()
planes = _read_planes()