Bonjour,
attention, il ne faut pas travailler avec les lignes de fret (c'est bien du transport de passagers qu'on veut faire ?)
Dunkerque port ouest est une gare de fret qui ne prend pas de voyageurs, c'est pour cela que dans la liste que j'ai créée, liste_gares, j'ai mis la condition if ligne[3] == 'O', c'est-à-dire oui dans la colonne voyageurs.
Ce qui donne le code (je te donne aussi le code pour la fonction graphes_lignes (dictionnaire de liste) et dico_lignes pour un dictionnaire de dictionnaires :
Code : Tout sélectionner
import csv
import geopy.distance as gd
with open('liste-des-gares.csv',newline='',encoding='utf-8') as h :
extraction = csv.reader(h)
liste_brute = [ligne for ligne in extraction]
liste_brute = liste_brute[1:]
liste_gares = [[int(ligne[0]),ligne[1],int(ligne[4]),float(ligne[15]),float(ligne[16])] for ligne in liste_brute if ligne[3]=='O' and ligne[15] != '']
def distance(point1,point2):
return gd.distance(point1, point2).kilometers
def graphe_lignes() :
dico={}
numero_lignes = lignes_debut_fin
for gare in liste_gares :
liste = []
for element in liste_gares :
if element[0] != gare[0] and element[2] == gare[2]:
liste.append((element[1],distance((gare[3],gare[4]),(element[3],element[4])),element[2]))
if gare[1] in dico.keys():
dico[gare[1]] = dico[gare[1]] + liste
else :
dico[gare[1]] = liste
return dico
def dico_lignes() :
dico={}
for gare in liste_gares :
dico_noeud = {}
for element in liste_gares :
if element[0] != gare[0] and element[2] == gare[2]:
dico_noeud[element[1]] = (distance((gare[3],gare[4]),(element[3],element[4])),element[2])
if gare[1] in dico.keys():
dico[gare[1]].update(dico_noeud)
else :
dico[gare[1]] = dico_noeud
return dico
Ainsi, si on veut les connexions liées à la gare de Dunkerque, on a :
Code : Tout sélectionner
>>> dico_lignes()['Dunkerque']
{'Lillers': (52.67065568069707, 301000), 'Mazingarbe': (67.41327489873221, 301000), 'Arras': (87.60721979706912, 301000), 'Farbus': (81.5189339100945, 301000), 'Arnèke': (22.24641891929466, 301000), 'Fouquereuil': (58.51116083041878, 301000), 'Vimy': (79.71236981811138, 301000), 'Cassel': (27.726351964301944, 301000), 'Steenbecque': (40.037026044300276, 301000), 'Coudekerque-Branche': (1.4408979997708593, 301000), 'Noeux-les-Mines': (64.47191455147392, 301000), 'Bailleul-Sir-Berthoult': (84.17089215297207, 301000), 'Bergues': (7.928546794387492, 301000), 'Liévin': (72.03501471454848, 301000), 'Bully-Grenay': (69.53333021262979, 301000), 'Chocques': (56.35241221791202, 301000), 'Ham-en-Artois': (49.38950680150897, 301000), 'Loos-en-Gohelle': (72.2535946089676, 301000), 'Isbergues': (46.581564586341045, 301000), 'Esquelbecq': (15.90365697499279, 301000), 'Lens': (74.39689188864531, 301000), 'Béthune': (59.695727840738456, 301000), 'Avion': (76.65418153905934, 301000), 'Thiennes': (42.603789246709, 301000)}
Bonne poursuite de projet