bussit.py

changeset 2
48efa8ca14dd
parent 0
fc48613c73e5
child 4
312c432bb9e6
--- a/bussit.py	Mon Apr 17 22:56:39 2017 +0300
+++ b/bussit.py	Tue Apr 18 14:59:18 2017 +0300
@@ -1,19 +1,10 @@
 #!/usr/bin/env python3
-import enum
+import enum, json
+from sys import stderr
 from datetime import date, time, datetime, timedelta
+from misc import *
 Suunta = enum.Enum('Suunta', [('Taaksepäin', 0), ('Eteenpäin', 1)])
 
-def lue_csv(tiedosto, muunnokset = None):
-	import csv
-	lukija = csv.reader(tiedosto)
-	otsakkeet = next(lukija)
-	for rivi in lukija:
-		tietue = dict(zip(otsakkeet, rivi))
-		if muunnokset:
-			for avain, muunnos in muunnokset.items():
-				tietue[avain] = muunnos(tietue[avain])
-		yield tietue
-
 def muunna_ajovuoro_tunniste(tunniste):
 	return int(tunniste.split('_')[0])
 
@@ -53,8 +44,8 @@
 		return 'palvelut[%r]' % self.tunniste
 
 class Pysäkki:
-	def __init__(self, tunniste, nimi):
-		self.tunniste, self.nimi = tunniste, nimi
+	def __init__(self, tunniste, nimi, sijainti):
+		self.tunniste, self.nimi, self.sijainti = tunniste, nimi, sijainti
 	def __repr__(self):
 		return 'pysäkit[%r]' % self.tunniste
 	def aikataulu(self, määrä = 50):
@@ -122,16 +113,16 @@
 palvelut = {}
 pysäkit = {}
 
-print('Ladataan linjat... ', end = '', flush = True)
+print('Ladataan linjat... ', file = stderr, end = '', flush = True)
 with open('gtfs/routes.txt') as tiedosto:
 	for rivi in lue_csv(tiedosto):
 		linja = Linja(rivi)
 		linja.tunniste = linja.tunniste
 		linjat[linja.viite] = linja
 		linjat_per_tunniste[linja.tunniste] = linja
-print('%d linjaa' % len(linjat))
+print('%d linjaa' % len(linjat), file = stderr)
 
-print('Ladataan ajot... ', end = '', flush = True)
+print('Ladataan ajot... ', file = stderr, end = '', flush = True)
 with open('gtfs/trips.txt') as tiedosto:
 	for rivi in lue_csv(tiedosto, muunnokset = {'direction_id': lambda k: Suunta(int(k))}):
 		if rivi['service_id'] not in palvelut:
@@ -144,7 +135,7 @@
 			suunta = rivi['direction_id'])
 		assert ajo.nimi not in ajot
 		ajot[ajo.nimi] = ajo
-print('%d ajoa' % len(ajot))
+print('%d ajoa' % len(ajot), file = stderr)
 
 def lue_päiväys(teksti):
 	return date(int(teksti[:4]), int(teksti[4:6]), int(teksti[6:]))
@@ -153,7 +144,7 @@
 	tunti, minuutti, sekunti = map(int, teksti.split(':'))
 	return timedelta(hours = tunti, minutes = minuutti, seconds = sekunti)
 
-print('Ladataan päiväykset... ', flush = True)
+print('Ladataan päiväykset... ', file = stderr, flush = True)
 
 viimeinen_käyttöpäivä = date.today()
 palvelut_per_päivä = {}
@@ -173,14 +164,18 @@
 		if päivä in palvelu.päivät:
 			yield palvelu
 
-print('Ladataan pysäkit... ', end = '', flush = True)
+print('Ladataan pysäkit... ', file = stderr, end = '', flush = True)
 with open('gtfs/stops.txt') as file:
 	for rivi in lue_csv(file):
-		pysäkki = Pysäkki(rivi['stop_id'], rivi['stop_name'])
+		sijainti = (float(rivi['stop_lat']), float(rivi['stop_lon']))
+		pysäkki = Pysäkki(rivi['stop_id'], rivi['stop_name'], sijainti)
 		pysäkit[pysäkki.tunniste] = pysäkki
-print('%d pysäkkiä' % len(pysäkit))
+with open('pysäkkialueet.json') as file:
+	for pysäkkitunniste, alue in json.load(file).items():
+		pysäkit[pysäkkitunniste].alue = alue
+print('%d pysäkkiä' % len(pysäkit), file = stderr)
 
-print('Ladataan aikataulut... ', end = '', flush = True)
+print('Ladataan aikataulut... ', end = '', flush = True, file = stderr)
 with open('gtfs/stop_times.txt') as file:
 	rivimäärä = sum(line.count('\n') for line in file)
 	laskettu = 0
@@ -193,5 +188,5 @@
 		ajo.reitti.append(Pysähdys(saapumisaika, lähtöaika, pysäkki, ajo))
 		laskettu += 1
 		if laskettu % 1000 == 0:
-			print('\rLadataan aikataulut... %.1f%%' % (laskettu * 100 / rivimäärä), end = ' ')
-print('\rLadataan aikataulut... ladattu')
\ No newline at end of file
+			print('\rLadataan aikataulut... %.1f%%' % (laskettu * 100 / rivimäärä), end = ' ', file = stderr)
+print('\rLadataan aikataulut... ladattu', file = stderr)
\ No newline at end of file

mercurial