ex 2.1
This commit is contained in:
parent
8b2d2fb1dd
commit
76e3381760
88
readrides.py
88
readrides.py
@ -1,24 +1,86 @@
|
|||||||
import csv
|
import csv
|
||||||
|
from collections import namedtuple
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
def read_rides_as_tuples(filename):
|
@dataclass
|
||||||
"""Read the bus ride data as a list of tuples"""
|
class DataClassRow:
|
||||||
records = []
|
route: str
|
||||||
|
date: str
|
||||||
|
daytype: str
|
||||||
|
rides: int
|
||||||
|
|
||||||
|
|
||||||
|
class BasicRow:
|
||||||
|
def __init__(self, route, date, daytype, rides):
|
||||||
|
self.route = route
|
||||||
|
self.date = date
|
||||||
|
self.daytype = daytype
|
||||||
|
self.rides = rides
|
||||||
|
|
||||||
|
|
||||||
|
class SlotsRow:
|
||||||
|
__slots__ = ['route', 'date', 'daytype', 'rides']
|
||||||
|
|
||||||
|
def __init__(self, route, date, daytype, rides):
|
||||||
|
self.route = route
|
||||||
|
self.date = date
|
||||||
|
self.daytype = daytype
|
||||||
|
self.rides = rides
|
||||||
|
|
||||||
|
|
||||||
|
TupleRow = namedtuple('Row', ['route', 'date', 'daytype', 'rides'])
|
||||||
|
|
||||||
|
|
||||||
|
def read_rides(filename, readfunc):
|
||||||
|
"""Read the bus ride data using a conversion function."""
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
rows = csv.reader(f)
|
rows = csv.reader(f)
|
||||||
next(rows)
|
next(rows)
|
||||||
for row in rows:
|
return [readfunc(row) for row in rows]
|
||||||
route = row[0]
|
|
||||||
date = row[1]
|
|
||||||
daytype = row[2]
|
def row_to_tuple(row):
|
||||||
rides = int(row[3])
|
return (row[0], row[1], row[2], int(row[3]))
|
||||||
record = (route, date, daytype, rides)
|
|
||||||
records.append(record)
|
|
||||||
return records
|
def row_to_dict(row):
|
||||||
|
return dict(route=row[0], date=row[1], daytype=row[2], rides=int(row[3]))
|
||||||
|
|
||||||
|
|
||||||
|
def row_to_namedtuple(row):
|
||||||
|
return TupleRow(row[0], row[1], row[2], int(row[3]))
|
||||||
|
|
||||||
|
|
||||||
|
def row_to_class(row):
|
||||||
|
return BasicRow(row[0], row[1], row[2], int(row[3]))
|
||||||
|
|
||||||
|
|
||||||
|
def row_to_slotsclass(row):
|
||||||
|
return SlotsRow(row[0], row[1], row[2], int(row[3]))
|
||||||
|
|
||||||
|
|
||||||
|
def row_to_dataclass(row):
|
||||||
|
return DataClassRow(route=row[0], date=row[1],
|
||||||
|
daytype=row[2], rides=int(row[3]))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
import sys
|
||||||
import tracemalloc
|
import tracemalloc
|
||||||
|
method = sys.argv[1]
|
||||||
|
methods = {
|
||||||
|
'tuple': row_to_tuple,
|
||||||
|
'dict': row_to_dict,
|
||||||
|
'namedtuple': row_to_namedtuple,
|
||||||
|
'class': row_to_class,
|
||||||
|
'slots': row_to_slotsclass,
|
||||||
|
'dataclass': row_to_dataclass,
|
||||||
|
}
|
||||||
|
if method not in methods:
|
||||||
|
print("unknown method")
|
||||||
|
sys.exit(-1)
|
||||||
tracemalloc.start()
|
tracemalloc.start()
|
||||||
rows = read_rides_as_tuples('Data/ctabus.csv')
|
rows = read_rides('Data/ctabus.csv', methods[method])
|
||||||
print('Memory Use: Current %d, Peak %d' % tracemalloc.get_traced_memory())
|
print('Memory Use: Current %d, Peak %d;' % tracemalloc.get_traced_memory(),
|
||||||
|
'Method:', method)
|
||||||
|
|||||||
5
readrides_data.sh
Executable file
5
readrides_data.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for method in tuple dict namedtuple class slots dataclass; do
|
||||||
|
python readrides.py $method
|
||||||
|
done
|
||||||
Loading…
x
Reference in New Issue
Block a user