IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Aide Module NetWorkx


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Points : 30
    Points
    30
    Par défaut Aide Module NetWorkx
    Bonjour,

    J'utilise le module NetWorkx afin de trouver toutes les chaines les plus courtes entre deux points d'un graphe.

    Tout fonctionne bien à un détail prés; dès qu'il n'existe pas de chemins entre deux points, mon script s’arrête et ne travaille pas pour les autres couples (point de départ, point d'arrivée).

    Du coup je voudrai savoir comment rajouter une condition pour que lorsque qu'il n'existe pas de chemins entre deux points, il me print le message suivant "Pas de chemin entre ces deux points" et continue avec les autres couples

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    import networkx as nx
    from collections import defaultdict
    dd=defaultdict(set)
    P=[]
     
    #Fichier contentant tout les couples (point de dpépart, point d'arrivée) à tester
    with open("3080_interactions_pour_736.txt","r") as f0:
    	for lignes0 in f0:
    		lignes0=lignes0.rstrip('\n').split(" ")
    		prot1=lignes0[0]
    		prot2=lignes0[1]
    		couple=prot1,prot2
    		P.append(list(couple))
    	#print(P)
     
    #Fichier contenant toutes les interactions binaires composant mon graphe
    with open("736(int_connues_avec_scores_sup_0).txt","r") as f1:
    	for lignes in f1:
    		if lignes.startswith('9606'):
    			lignes=lignes.rstrip('\n').split(" ")
    			proteine1=lignes[2]
    			proteine2=lignes[3]
    			dd[proteine1].add(proteine2)
     
    #Pour chaque couple de mon premier fichier, j'applique le module des plus courtes chaines:
    for couples in P:
    	prot1=couples[0]
    	prot2=couples[1]
    	Lchaines=([p for p in nx.all_shortest_paths(dd, source=prot1, target=prot2, weight=None)])
     
    	print("")
    	print("The first protein in the chain is", prot1)
    	print("The last protein in the chain is", prot2)
    	print("")
    	print("Minimal size chain(s):")
    	print("")
     
    	for chaines in Lchaines:
     
    		#Pour avoir des chaines de taille 11 maximum
    		if len(chaines) <= 0:
    			print("Pas de chaines")
    		if len(chaines) <= 11:
     
    			print(' '.join(chaines))
    		else :
     
    			print('ERROR - The minimum size of the chains exceeds the limit')
    			break
    	print("")
    	print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    Voici le message d'erreur que je reçois :

    Traceback (most recent call last):

    File "C:\Users\loisv\Desktop\pluscourtchemin.py", line 26, in <module>

    Lchaines=([p for p in nx.all_shortest_paths(dd, source=prot1, target=prot2, weight=None)])

    File "C:\Users\loisv\Desktop\pluscourtchemin.py", line 26, in <listcomp>

    Lchaines=([p for p in nx.all_shortest_paths(dd, source=prot1, target=prot2, weight=None)])

    File "C:\Users\loisv\AppData\Local\Programs\Python\Python37-32\lib\site-packages\networkx\algorithms\shortest_paths\generic.py", line 481, in all_shortest_paths

    'from Source {}'.format(target, source))

    networkx.exception.NetworkXNoPath: Target IKBKE cannot be reachedfrom Source LCK

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Amniote Voir le message
    Du coup je voudrai savoir comment rajouter une condition pour que lorsque qu'il n'existe pas de chemins entre deux points, il me print le message suivant "Pas de chemin entre ces deux points" et continue avec les autres couples
    Vu le message d'erreur, le souci arrive quand tu invoques Lchaines=([p for p in nx.all_shortest_paths(dd, source=prot1, target=prot2, weight=None)]) alors qu'il n'y a pas de chemin possible (le module networkx remonte une exception).

    Donc, à moins que tu puisses détecter au préalable par un autre moyen qu'il n'y a pas de chemin disponible, te suffit de mettre cette instruction dans un try...except.

    Et accessoirement, écrire une liste en intension sans critère ni action (ex (x for x in truc)) est inutile car ça peut se remplacer alors plus simplement par list(truc) (ou tuple(truc) si le résultat n'a pas besoin d'évoluer) => Lchaines=tuple(nx.all_shortest_paths(dd, source=prot1, target=prot2, weight=None))...

    Citation Envoyé par Amniote Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    prot1=lignes0[0]
    prot2=lignes0[1]
    couple=prot1,prot2
    P.append(list(couple))
    P.append(lignes0[0:2])
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Aide Module date::calc
    Par Nickname dans le forum Modules
    Réponses: 1
    Dernier message: 15/04/2009, 09h45
  2. [Système] aide sur acess module de paiement
    Par kalissia dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2007, 19h27
  3. Besoin d'aide pour installer le module Encode::Detect
    Par bluecurve dans le forum Modules
    Réponses: 3
    Dernier message: 07/12/2006, 13h34
  4. Besoin d'aide avec le module storable bug de version :s
    Par mobscene dans le forum Modules
    Réponses: 3
    Dernier message: 21/10/2006, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo