-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreadrides.py
More file actions
116 lines (96 loc) · 2.93 KB
/
readrides.py
File metadata and controls
116 lines (96 loc) · 2.93 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
# readrides.py
import collections.abc
import csv
class RideData(collections.abc.Sequence):
def __init__(self):
self.routes = []
self.dates = []
self.daytypes = []
self.numrides = []
def __getitem__(self, idx):
item = {
"route": self.routes[idx],
"date": self.dates[idx],
"daytype": self.daytypes[idx],
"rides": self.numrides[idx],
}
return item
def __len__(self):
return len(self.routes)
def append(self, d):
self.routes.append(d["route"])
self.dates.append(d["date"])
self.daytypes.append(d["daytype"])
self.numrides.append(d["rides"])
def read_rides_as_tuples(filename):
"""
Read the bus ride data as a list of tuples
"""
records = []
with open(filename, encoding="utf-8") as f:
rows = csv.reader(f)
_ = next(rows) # Skip headers
for row in rows:
route = row[0]
date = row[1]
daytype = row[2]
numrides = int(row[3])
record = (route, date, daytype, numrides)
records.append(record)
return records
def read_rides_as_dicts(filename):
"""
Read the bus ride data as a list of dicts
"""
records = RideData()
with open(filename, encoding="utf-8") as f:
rows = csv.reader(f)
_ = next(rows) # Skip headers
for row in rows:
route = row[0]
date = row[1]
daytype = row[2]
numrides = int(row[3])
record = {
"route": route,
"date": date,
"daytype": daytype,
"rides": numrides,
}
records.append(record)
return records
class Row:
# Uncomment to see effect of slots
# __slots__ = ('route', 'date', 'daytype', 'rides')
def __init__(self, route, date, daytype, rides):
self.route = route
self.date = date
self.daytype = daytype
self.rides = rides
# Uncomment to use a namedtuple instead
# from collections import namedtuple
# Row = namedtuple('Row',('route','date','daytype','rides'))
def read_rides_as_instances(filename):
"""
Read the bus ride data as a list of instances
"""
records = []
with open(filename, encoding="utf-8") as f:
rows = csv.reader(f)
_ = next(rows) # Skip headers
for row in rows:
route = row[0]
date = row[1]
daytype = row[2]
numrides = int(row[3])
record = Row(route, date, daytype, numrides)
records.append(record)
return records
if __name__ == "__main__":
import tracemalloc
tracemalloc.start()
read_rides = read_rides_as_dicts # Change to as_dicts, as_instances, etc.
rides = read_rides("Data/ctabus.csv")
print(
"Memory Use: Current {:,}, Peak {:,}".format(*tracemalloc.get_traced_memory())
)