Skip to content

Instantly share code, notes, and snippets.

@Khazbs
Created June 25, 2019 19:06
Show Gist options
  • Save Khazbs/565b7bd7a1b036bf05924108ab27c165 to your computer and use it in GitHub Desktop.
Save Khazbs/565b7bd7a1b036bf05924108ab27c165 to your computer and use it in GitHub Desktop.
INDEX, INS_DATE, ORIGIN, DEST, DEP_DATE = 0, 1, 2, 3, 4
ARR_DATE, TR_TYPE, PRICE, TR_CLASS, FARE = 5, 6, 7, 8, 9
def load_csv(filename):
with open(filename, 'r') as file:
head = tuple(next(file).strip().split(','))
data = []
for line in file:
row = tuple(line.strip().split(','))
data.append(row)
data.sort(key=lambda row: row[DEP_DATE])
return head, data
def splitby_origin_dest(data):
datas_origin_dest = {}
for row in data:
origin_dest = row[ORIGIN].lower() + '-' + row[DEST].lower()
if origin_dest in datas_origin_dest:
datas_origin_dest[origin_dest].append(row)
else:
datas_origin_dest[origin_dest] = []
return datas_origin_dest
def save_csvs(head, datas):
for filename, data in datas.items():
with open(filename + '.csv', 'w') as file:
file.write(','.join(head) + '\n')
for row in data:
file.write(','.join(row) + '\n')
def interactive_mode(datas_origin_dest):
while True:
origin = input('Enter origin: ')
if not origin:
return
dest = input('Enter destination: ')
origin_dest = origin.lower() + '-' + dest.lower()
if origin_dest in datas_origin_dest:
data = datas_origin_dest[origin_dest]
date = input('Enter departure date as YYYY-MM-DD: ')
if len(date) == 10:
trains = list(filter(lambda row: row[DEP_DATE].startswith(date), data))
if len(trains):
trains.sort(key=lambda row: float(row[PRICE]))
print(f'Listing the trains from {origin} to {dest} on {date}:')
for row in trains:
print(row[ORIGIN:])
else:
print(f'No such trains')
else:
print('Wrong date format')
else:
print('No such combination of cities')
head, data = load_csv('renfe.csv')
datas_origin_dest = splitby_origin_dest(data)
save_csvs(head, datas_origin_dest)
interactive_mode(datas_origin_dest)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment