forked from dabeaz-course/python-mastery
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadrides.py
123 lines (102 loc) · 3.2 KB
/
readrides.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
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
# readrides.py
import csv
from collections import namedtuple
from typing import Any
class Row:
def __init__(self, route, date, daytype, rides) -> None:
self.route = route
self.date = date
self.daytype = daytype
self.rides = rides
RowTuple = namedtuple("RowTuple", ["route", "date", "daytype", "rides"])
class RowSlots:
__slots__ = ["route", "date", "daytype", "rides"]
def __init__(self, route, date, daytype, rides) -> None:
self.route = route
self.date = date
self.daytype = daytype
self.rides = rides
def read_rides_as_tuples(filename) -> list[Any]:
"""
Read the bus ride data as a list of tuples
"""
print("tuples")
records = []
with open(filename) as f:
rows = csv.reader(f)
next(rows) # Skip headers
for row in rows:
route = row[0]
date = row[1]
daytype = row[2]
rides = int(row[3])
record = (route, date, daytype, rides)
records.append(record)
return records
def read_rides_as_dicts(filename) -> list[dict[str, Any]]:
"""
Read the bus ride data as a list of dictionaries
"""
print("dictionaries")
records = []
with open(filename) as f:
rows = csv.reader(f)
next(rows) # Skip headers
for row in rows:
record = {
"route": row[0],
"date": row[1],
"daytype": row[2],
"rides": int(row[3]),
}
records.append(record)
return records
def read_rides_as_classes(filename) -> list[Row]:
"""
Read the bus ride data as a list of Row
"""
print("classes")
records = []
with open(filename) as f:
rows = csv.reader(f)
next(rows) # Skip headers
for row in rows:
record = Row(row[0], row[1], row[2], int(row[3]))
records.append(record)
return records
def read_rides_as_namedtuples(filename) -> list[RowTuple]:
"""
Read the bus ride data as a list of RowTuple
"""
print("namedtuples:")
records = []
with open(filename) as f:
rows = csv.reader(f)
next(rows) # Skip headers
for row in rows:
record = RowTuple(row[0], row[1], row[2], int(row[3]))
records.append(record)
return records
def read_rides_as_slots(filename) -> list[RowTuple]:
"""
Read the bus ride data as a list of RowSlots
"""
print("slots:")
records = []
with open(filename) as f:
rows = csv.reader(f)
next(rows) # Skip headers
for row in rows:
record = RowSlots(row[0], row[1], row[2], int(row[3]))
records.append(record)
return records
if __name__ == "__main__":
import tracemalloc
tracemalloc.start()
# slots < tuples < namedtuples << classes << dictionaries
# rows = read_rides_as_tuples("Data/ctabus.csv")
# rows = read_rides_as_dictionaries("Data/ctabus.csv")
# rows = read_rides_as_classes("Data/ctabus.csv")
# rows = read_rides_as_namedtuples("Data/ctabus.csv")
rows = read_rides_as_slots("Data/ctabus.csv")
print("Memory Use: Current %d, Peak %d" % tracemalloc.get_traced_memory())