Example: using objects as property stores

We will use the train timetable data available at https://data.gov.in/catalog/indian-railways-train-time-table-0 to start.


In [1]:
import csv

def _convert_time_to_minutes(time):
    return time[0] * 60 + time[1]    

def _convert_time_to_string(time):
        zero_pad = lambda x : len(x) == 1 and '0' + x or x
        hour = zero_pad(str(time[0]))
        minute = zero_pad(str(time[1]))
        return hour + ":" + minute

class Train:
    train_no = None
    train_name = None
    islno = None
    station_code = None
    station_name = None
    arrival_time = None
    departure_time = None
    distance = None
    source_station_code = None
    source_station_name = None
    destination_station_code = None
    destination_station_name = None

    def __init__(self, csvitem):
        self.train_no = csvitem[0].strip()
        self.train_name = csvitem[1].strip()
        self.islno = csvitem[2].strip()
        self.station_code = csvitem[3].strip()
        self.station_name = csvitem[4].strip()

        parse_hour_minute = lambda arrival_time : (int(arrival_time[:2]), int(arrival_time[3:5]))

        self.arrival_time = parse_hour_minute(csvitem[5].replace("'", '').strip())
        self.departure_time = parse_hour_minute(csvitem[6].replace("'", '').strip())

        self.distance = csvitem[7].strip()
        self.source_station_code = csvitem[8].strip()
        self.source_station_name = csvitem[9].strip()
        self.destination_station_code = csvitem[10].strip()
        self.destination_station_name = csvitem[11].strip()

    def get_arrival_minute(self):
        return _convert_time_to_minutes(self.arrival_time)

    def get_arrival_time_string(self):
        return _convert_time_to_string(self.arrival_time)

    def get_departure_minute(self):
        return _convert_time_to_minutes(self.departure_time)

    def get_departure_time_string(self):
        return _convert_time_to_string(self.departure_time)

In [2]:
#f = open('/home/kumar/Downloads/isl_wise_train_detail_03082015_v1.csv', 'r')

import urllib.request
import codecs

f = urllib.request.urlopen('https://data.gov.in/sites/default/files/datafile/isl_wise_train_detail_03082015_v1.csv')
# Skip first line
f.readline()
reader = csv.reader(codecs.iterdecode(f, 'utf-8'))
#reader = csv.reader(f)
train_list = []
for i in reader:
    train_list.append(Train(i))
print("Read %d trains!" % len(train_list))


Read 69006 trains!

In [3]:
# Find all trains that leave from Dadar
print(set([t.train_name for t in train_list if t.source_station_code == 'MAS']))

# Find trains that arrive in Dadar
dr_arr = list(filter(lambda t : t.destination_station_code == 'DR', train_list))

dr_deps = list(filter(lambda t : t.source_station_code == 'DR', train_list))

# Find the train that arrives earliest from Dadar
earliest_dr_arrival = min(dr_arr, key=lambda t : t.get_arrival_minute())
print("%s arrives at Dadar at %s" % (earliest_dr_arrival.train_name, earliest_dr_arrival.get_arrival_time_string()))

# Find the train that departs earliest from Dadar
earliest_dr_dep = min(dr_deps, key=lambda t : t.get_departure_minute())
print("%s departs Dadar at %s" % (earliest_dr_dep.train_name, earliest_dr_dep.get_departure_time_string()))

# Find trains that leave Dadar ordered by departure time
sorted_dr_deps = sorted(dr_deps, key=lambda t : t.get_departure_minute())
for i in sorted_dr_deps:
    print("%s leaves at %s." % (i.train_name, i.get_departure_time_string()))


{'MAS HUBLI EXP', 'CHENNAI LTT EXP', 'SHIRDI EXPRESS', 'NAGERCOIL EXP', 'PALANI EXPRESS', 'MYSORE EXPRESS', 'BANGALORE MAIL', 'COIMBATORE EXP', 'MUMBAI EXPRESS', 'SAPTHAGIRI EXP', 'YERCAUD EXPRESS', 'MAS VSKP  EXP', 'MAS ASN EXPRESS', 'GRAND TRUNK EXP', 'CHERAN EXPRESS', 'PINAKINI EXP', 'YESVANTPUR EXP', 'COROMANDEL EXP', 'WEST COAST EXP', 'DURONTO EXPRESS', 'MANGALORE EXP', 'SHATABDI EXP', 'MAS NSL EXPRESS', 'MAS ERS EXP', 'NZM GARIB RATH', 'SSPN EXPRESS', 'GANGAKAVERI EXP', 'JAIPUR EXP', 'MAS ADI EXPRESS', 'SBC DOUBLE DECK', 'HYDERABAD EXP', 'MAS VASCO EXP', 'MAS SRC AC EXP', 'MUMBAI MAIL', 'RAJDHANI EXP', 'CHARMINAR EXP', 'NILAGIRI EXP', 'HOWRAH MAIL', 'HALDIA EXPRESS', 'MAS SHM EXP', 'BHUBANESWAR EXP', 'ALLEPPEY EXP', 'VISAKAPATNAM EX', 'MAS NJP EXPRESS', 'BRINDAVAN EXP', 'LUCKNOW EXP', 'TAMIL NADU EXP', 'KAVERI  EXPRESS', 'LALBAGH EXPRESS', 'MDU DURONTO EXP', 'TIRUPATHI EXP', 'ANUVRATEXPRESS', 'ANDAMAN EXPRESS', 'MAS PURI EXPRES', 'BANGALORE EXP', 'KOVAI EXPRESS', 'TRIVANDRUM MAIL', 'NAVAJIVAN EXP', 'MANGALORE MAIL', 'BILASPUR EXPRES', 'TIRUPATHY EXP', 'SUPER AC EXP', 'TRIVANDRUM EXP', 'JAN SHATABDI'}
BSL DR T F SPL arrives at Dadar at 00:00
DR BSL T F SPL departs Dadar at 00:00
DR BSL T F SPL leaves at 00:00.
RAJYA RANI EXP leaves at 00:00.
PUDUCHERRY EXP leaves at 00:00.
TIRUNELVELI EXP leaves at 00:00.
SHARAVATHI EXP leaves at 00:00.
JAN SHATABDI EX leaves at 00:00.
JAN SHATABDI EX leaves at 00:00.
DR SAINAGAR EXP leaves at 00:00.
CHENNAI EXPRESS leaves at 00:00.
DADAR TEN EXP leaves at 00:00.
RATNAGIRI PASS leaves at 00:00.
RAJYA RANI EXP leaves at 00:05.
DR BSL T F SPL leaves at 00:10.
DR SAINAGAR EXP leaves at 00:10.
CHENNAI EXPRESS leaves at 00:10.
DADAR TEN EXP leaves at 00:10.
RATNAGIRI PASS leaves at 00:11.
RAJYA RANI EXP leaves at 00:30.
TIRUNELVELI EXP leaves at 00:30.
DADAR TEN EXP leaves at 00:40.
DR BSL T F SPL leaves at 00:55.
DR SAINAGAR EXP leaves at 00:55.
RAJYA RANI EXP leaves at 00:56.
PUDUCHERRY EXP leaves at 01:10.
PUDUCHERRY EXP leaves at 01:10.
TIRUNELVELI EXP leaves at 01:10.
SHARAVATHI EXP leaves at 01:10.
RAJYA RANI EXP leaves at 01:20.
DADAR TEN EXP leaves at 01:50.
DR SAINAGAR EXP leaves at 01:55.
DR SAINAGAR EXP leaves at 02:22.
DR BSL T F SPL leaves at 02:32.
DADAR TEN EXP leaves at 02:32.
PUDUCHERRY EXP leaves at 02:50.
TIRUNELVELI EXP leaves at 03:00.
DR SAINAGAR EXP leaves at 03:00.
PUDUCHERRY EXP leaves at 03:05.
RAJYA RANI EXP leaves at 03:20.
PUDUCHERRY EXP leaves at 03:25.
DR BSL T F SPL leaves at 03:30.
PUDUCHERRY EXP leaves at 03:40.
DR SAINAGAR EXP leaves at 03:41.
RAJYA RANI EXP leaves at 03:48.
PUDUCHERRY EXP leaves at 04:00.
TIRUNELVELI EXP leaves at 04:00.
SHARAVATHI EXP leaves at 04:00.
RAJYA RANI EXP leaves at 04:04.
CHENNAI EXPRESS leaves at 04:05.
DADAR TEN EXP leaves at 04:15.
DADAR TEN EXP leaves at 04:20.
TIRUNELVELI EXP leaves at 04:25.
PUDUCHERRY EXP leaves at 04:30.
PUDUCHERRY EXP leaves at 04:55.
PUDUCHERRY EXP leaves at 04:55.
TIRUNELVELI EXP leaves at 04:55.
SHARAVATHI EXP leaves at 04:55.
RAJYA RANI EXP leaves at 05:04.
PUDUCHERRY EXP leaves at 05:20.
TIRUNELVELI EXP leaves at 05:20.
JAN SHATABDI EX leaves at 05:25.
TIRUNELVELI EXP leaves at 05:30.
RAJYA RANI EXP leaves at 05:36.
DADAR TEN EXP leaves at 05:45.
JAN SHATABDI EX leaves at 05:50.
JAN SHATABDI EX leaves at 06:01.
RAJYA RANI EXP leaves at 06:02.
CHENNAI EXPRESS leaves at 06:10.
DADAR TEN EXP leaves at 06:10.
PUDUCHERRY EXP leaves at 06:15.
TIRUNELVELI EXP leaves at 06:15.
SHARAVATHI EXP leaves at 06:15.
RAJYA RANI EXP leaves at 06:18.
PUDUCHERRY EXP leaves at 06:25.
DADAR TEN EXP leaves at 06:32.
CHENNAI EXPRESS leaves at 06:35.
RAJYA RANI EXP leaves at 06:38.
JAN SHATABDI EX leaves at 06:38.
PUDUCHERRY EXP leaves at 06:55.
TIRUNELVELI EXP leaves at 06:55.
SHARAVATHI EXP leaves at 06:55.
TIRUNELVELI EXP leaves at 07:05.
DADAR TEN EXP leaves at 07:12.
CHENNAI EXPRESS leaves at 07:20.
PUDUCHERRY EXP leaves at 07:25.
TIRUNELVELI EXP leaves at 07:25.
SHARAVATHI EXP leaves at 07:25.
DADAR TEN EXP leaves at 07:28.
CHENNAI EXPRESS leaves at 07:52.
PUDUCHERRY EXP leaves at 08:02.
TIRUNELVELI EXP leaves at 08:02.
SHARAVATHI EXP leaves at 08:02.
TIRUNELVELI EXP leaves at 08:05.
RAJYA RANI EXP leaves at 08:10.
CHENNAI EXPRESS leaves at 08:10.
DADAR TEN EXP leaves at 08:35.
RAJYA RANI EXP leaves at 08:40.
CHENNAI EXPRESS leaves at 08:50.
RAJYA RANI EXP leaves at 08:58.
TIRUNELVELI EXP leaves at 09:00.
PUDUCHERRY EXP leaves at 09:05.
TIRUNELVELI EXP leaves at 09:05.
SHARAVATHI EXP leaves at 09:05.
RAJYA RANI EXP leaves at 09:12.
TIRUNELVELI EXP leaves at 09:25.
CHENNAI EXPRESS leaves at 09:25.
RAJYA RANI EXP leaves at 09:30.
DADAR TEN EXP leaves at 09:32.
RAJYA RANI EXP leaves at 09:50.
TIRUNELVELI EXP leaves at 09:50.
JAN SHATABDI EX leaves at 09:52.
PUDUCHERRY EXP leaves at 10:00.
TIRUNELVELI EXP leaves at 10:00.
SHARAVATHI EXP leaves at 10:00.
CHENNAI EXPRESS leaves at 10:00.
RAJYA RANI EXP leaves at 10:20.
TIRUNELVELI EXP leaves at 10:35.
RAJYA RANI EXP leaves at 10:40.
PUDUCHERRY EXP leaves at 10:40.
TIRUNELVELI EXP leaves at 10:40.
SHARAVATHI EXP leaves at 10:40.
DADAR TEN EXP leaves at 10:52.
RAJYA RANI EXP leaves at 10:56.
JAN SHATABDI EX leaves at 11:10.
CHENNAI EXPRESS leaves at 11:15.
PUDUCHERRY EXP leaves at 11:27.
TIRUNELVELI EXP leaves at 11:27.
SHARAVATHI EXP leaves at 11:27.
CHENNAI EXPRESS leaves at 11:42.
CHENNAI EXPRESS leaves at 12:25.
PUDUCHERRY EXP leaves at 12:40.
TIRUNELVELI EXP leaves at 12:40.
SHARAVATHI EXP leaves at 12:40.
DADAR TEN EXP leaves at 12:48.
DADAR TEN EXP leaves at 13:00.
JAN SHATABDI EX leaves at 13:14.
CHENNAI EXPRESS leaves at 13:25.
PUDUCHERRY EXP leaves at 13:45.
TIRUNELVELI EXP leaves at 13:45.
SHARAVATHI EXP leaves at 13:45.
JAN SHATABDI EX leaves at 13:52.
JAN SHATABDI EX leaves at 14:00.
CHENNAI EXPRESS leaves at 14:10.
PUDUCHERRY EXP leaves at 14:15.
TIRUNELVELI EXP leaves at 14:15.
SHARAVATHI EXP leaves at 14:15.
JAN SHATABDI EX leaves at 14:25.
JAN SHATABDI EX leaves at 14:43.
PUDUCHERRY EXP leaves at 14:45.
TIRUNELVELI EXP leaves at 14:45.
SHARAVATHI EXP leaves at 14:45.
DADAR TEN EXP leaves at 14:50.
JAN SHATABDI EX leaves at 14:54.
PUDUCHERRY EXP leaves at 15:00.
TIRUNELVELI EXP leaves at 15:00.
SHARAVATHI EXP leaves at 15:00.
CHENNAI EXPRESS leaves at 15:10.
RATNAGIRI PASS leaves at 15:35.
CHENNAI EXPRESS leaves at 15:40.
RATNAGIRI PASS leaves at 16:00.
RATNAGIRI PASS leaves at 16:15.
RATNAGIRI PASS leaves at 16:20.
RATNAGIRI PASS leaves at 16:27.
RATNAGIRI PASS leaves at 16:37.
RATNAGIRI PASS leaves at 16:42.
RATNAGIRI PASS leaves at 16:46.
DADAR TEN EXP leaves at 16:50.
CHENNAI EXPRESS leaves at 17:00.
RATNAGIRI PASS leaves at 17:01.
PUDUCHERRY EXP leaves at 17:05.
TIRUNELVELI EXP leaves at 17:05.
SHARAVATHI EXP leaves at 17:05.
JAN SHATABDI EX leaves at 17:10.
RATNAGIRI PASS leaves at 17:12.
PUDUCHERRY EXP leaves at 17:17.
TIRUNELVELI EXP leaves at 17:17.
SHARAVATHI EXP leaves at 17:17.
RATNAGIRI PASS leaves at 17:19.
RATNAGIRI PASS leaves at 17:25.
RATNAGIRI PASS leaves at 17:40.
RATNAGIRI PASS leaves at 17:45.
RATNAGIRI PASS leaves at 17:55.
CHENNAI EXPRESS leaves at 18:05.
PUDUCHERRY EXP leaves at 18:10.
TIRUNELVELI EXP leaves at 18:10.
SHARAVATHI EXP leaves at 18:10.
JAN SHATABDI EX leaves at 18:15.
DADAR TEN EXP leaves at 18:20.
RATNAGIRI PASS leaves at 18:20.
RATNAGIRI PASS leaves at 18:35.
PUDUCHERRY EXP leaves at 18:38.
TIRUNELVELI EXP leaves at 18:38.
JAN SHATABDI EX leaves at 18:45.
CHENNAI EXPRESS leaves at 18:55.
SHARAVATHI EXP leaves at 19:00.
CHENNAI EXPRESS leaves at 19:02.
RATNAGIRI PASS leaves at 19:19.
PUDUCHERRY EXP leaves at 19:30.
TIRUNELVELI EXP leaves at 19:30.
SHARAVATHI EXP leaves at 19:30.
RATNAGIRI PASS leaves at 19:38.
RATNAGIRI PASS leaves at 19:48.
RATNAGIRI PASS leaves at 19:58.
RATNAGIRI PASS leaves at 20:05.
RATNAGIRI PASS leaves at 20:16.
DADAR TEN EXP leaves at 20:20.
RATNAGIRI PASS leaves at 20:23.
CHENNAI EXPRESS leaves at 20:30.
RATNAGIRI PASS leaves at 20:31.
SHARAVATHI EXP leaves at 20:35.
DADAR TEN EXP leaves at 20:40.
RATNAGIRI PASS leaves at 20:41.
RATNAGIRI PASS leaves at 20:51.
DADAR TEN EXP leaves at 21:05.
CHENNAI EXPRESS leaves at 21:10.
RATNAGIRI PASS leaves at 21:12.
DADAR TEN EXP leaves at 21:15.
PUDUCHERRY EXP leaves at 21:30.
TIRUNELVELI EXP leaves at 21:30.
SHARAVATHI EXP leaves at 21:30.
DADAR TEN EXP leaves at 21:31.
RATNAGIRI PASS leaves at 21:40.
DR BSL T F SPL leaves at 21:45.
DR SAINAGAR EXP leaves at 21:45.
DADAR TEN EXP leaves at 21:55.
PUDUCHERRY EXP leaves at 22:00.
TIRUNELVELI EXP leaves at 22:00.
DR BSL T F SPL leaves at 22:05.
DR SAINAGAR EXP leaves at 22:05.
PUDUCHERRY EXP leaves at 22:10.
TIRUNELVELI EXP leaves at 22:10.
SHARAVATHI EXP leaves at 22:10.
RATNAGIRI PASS leaves at 22:20.
PUDUCHERRY EXP leaves at 22:21.
TIRUNELVELI EXP leaves at 22:21.
DR SAINAGAR EXP leaves at 22:25.
PUDUCHERRY EXP leaves at 22:35.
CHENNAI EXPRESS leaves at 22:40.
RATNAGIRI PASS leaves at 22:41.
DR BSL T F SPL leaves at 22:45.
DADAR TEN EXP leaves at 22:50.
PUDUCHERRY EXP leaves at 22:55.
TIRUNELVELI EXP leaves at 22:55.
SHARAVATHI EXP leaves at 22:55.
TIRUNELVELI EXP leaves at 23:00.
RATNAGIRI PASS leaves at 23:01.
RATNAGIRI PASS leaves at 23:16.
PUDUCHERRY EXP leaves at 23:27.
DADAR TEN EXP leaves at 23:35.
RATNAGIRI PASS leaves at 23:41.
PUDUCHERRY EXP leaves at 23:45.
TIRUNELVELI EXP leaves at 23:45.
SHARAVATHI EXP leaves at 23:45.
RATNAGIRI PASS leaves at 23:57.