-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRouteVar.py
More file actions
127 lines (103 loc) · 4.91 KB
/
RouteVar.py
File metadata and controls
127 lines (103 loc) · 4.91 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import json
import csv
import os
class RouteVar():
def __init__(self, RouteId, RouteVarId, RouteVarName, RouteVarShortName, RouteNo, StartStop, EndStop, Distance, Outbound, RunningTime ):
self.routeId = RouteId
self.routeVarId = RouteVarId
self.routeVarName = RouteVarName
self.routeVarShortName = RouteVarShortName
self.routeNo = RouteNo
self.startStop = StartStop
self.endStop = EndStop
self.distance = Distance
self.outbound = Outbound
self.runningTime = RunningTime
def getRouteVar(self, *argv):
result = {}
allowed_properties = list(self.__dict__.keys())
for arg in argv:
if arg not in allowed_properties:
raise ValueError(f"Invalid property {arg} in the property of RouteVar" + '\n' + f"Properties should look for {allowed_properties}")
for arg in argv:
result[arg] = getattr(self, arg)
return result
def setRouteVar(self, **kwargs):
allowed_properties = list(self.__dict__.keys())
for key, value in kwargs.items():
if key not in allowed_properties:
raise ValueError(f"Invalid property: {key}")
for key, value in kwargs.items():
setattr(self, key, value)
print("Successfully reset the RouteVar properties!")
return True
class RouteVarQuery:
def __init__(self):
self.route_vars = []
def readData(self, file_path):
try:
route_var_dict = {}
with open(file_path, "r") as file:
data_list = [json.loads(line.strip()) for line in file]
fixed_data_list = [data for data in data_list if data != []]
for data in fixed_data_list:
for ind, innerdata in enumerate(data):
route_id = str(innerdata["RouteId"])
route_var_id = str(innerdata["RouteVarId"])
distance = float(innerdata["Distance"] / 1000)
running_time = float(innerdata["RunningTime"] / 60)
data[ind] = RouteVar(**innerdata)
if route_id not in route_var_dict:
route_var_dict[str(route_id)] = {}
if route_var_id not in route_var_dict[route_id]:
route_var_dict[route_id][route_var_id] = []
route_var_dict[route_id][route_var_id] = [distance, running_time]
self.route_vars.append(data)
return route_var_dict
except FileNotFoundError as e:
print(f"error: {e}")
def searchByABC(self, **kwargs):
"""
Data shape: [[object1 , object2], [object1 , object2], [object1 , object2], ...]
"""
datas = self.route_vars
result = []
try:
for data in datas:
searchData = [element for element in data if all(element.getRouteVar(key)[key] == value for key, value in kwargs.items())]
if searchData != []:
result.append(searchData)
break
return result
except Exception as e:
print(f"Error: {e}")
def outputAsCSV(self, query_list):
home_dir = os.getcwd()
filename = os.path.join(home_dir,"Output", "RouteVarOutputAsCSV.csv")
"""
Format of file: [ [{}, {}] , [{} , {}] , ... ]
"""
try:
with open(filename, newline='', mode= 'w', encoding= "utf-8") as csvfile:
fieldnames = ['routeId', 'routeVarId', 'routeVarName', 'routeVarShortName', 'routeNo', 'startStop', 'endStop', 'distance', 'outbound', 'runningTime']
writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
writer.writeheader()
for data in query_list:
data = [element.getRouteVar(*fieldnames) for element in data]
writer.writerows(data)
except Exception as e:
print(f"Error with CSV: {str(e)}")
def outputAsJSON(self, query_list):
"""
Format of file: [ [{}, {}] , [{} , {}] , ... ]
"""
home_dir = os.getcwd()
file_path = os.path.join(home_dir, "Output", "RouteVarOutputAsJSON.json")
try:
with open(file_path, 'w' , encoding= "utf-8") as file:
fieldnames = ['routeId', 'routeVarId', 'routeVarName', 'routeVarShortName', 'routeNo', 'startStop', 'endStop', 'distance', 'outbound', 'runningTime']
for data in query_list:
data = [element.getRouteVar(*fieldnames) for element in data]
file.write(json.dumps(data, ensure_ascii= False) + '\n')
except Exception as e:
print(f"There is and error : {str(e)}")