Bonjour à tous,

Je dois "réécrire" un script python qui a été codé en python 3.

Il faut que je le réécrive afin qu'il soit interprétable en python 2.7

Cette partie de mon code me pose souci, elle n'est pas lisible en python 2.7 et je ne vois pas comment la modifier afin qu'elle soit lisible:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
yield from chain(maillon, pathway +[m])

Voici mon code en entier si ça peut aider (la ligne en question est la ligne 28):

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
53
54
 
import sys
sys.setrecursionlimit(1000000)
from collections import defaultdict
dd = defaultdict(set)
L=[]
 
with open ("C:/Users/lveillat/Desktop/Données stage/Fichiers tests/testchaines3.txt","r") as f1:
	for ligne in f1:
		#ðif ligne.startswith('9606'):
		lp = ligne.rstrip('\n').split(" ")
		prot1 = lp[0] #je sélectionne la première protéine de chaques interactions
		prot2 = lp[1] #je sélectionne la seconde protéine de chaques interactions
		dd[prot1].add(prot2) #Je crée mon dictionnaire avec en clé la première prot de l'interaction et en valeurs l'ensembles des prots avec qui elle peut interagir
#print(dd)
 
def chain(maillon, pathway, limite=11): #Je définis une fonction chain(maillon, chaine d'interaction, limite de taille de la chaine)
	next_= maillon.get(pathway[-1], None) #next_ = On rajoute un maillon à la chaine existante en fonction de la dernière protéine du pathway
 
	if next_ is None or len(pathway) >= limite : #Si il n'y a pas de protéine trouvée interagissant avec la dernière protéine du pathway, ou si la taille dépasse la limite alors on passe a la chaine suivante
		yield pathway #yield est pratique quand on sait que la fonction va retourner de nombreuses valeurs qu?on ne souhaite lire qu?une seule fois (c'est notre cas ici), permet d'économiser de la mémoire.
 
 
	if len(pathway) < limite  : #Si on trouve encore des protéines interagissant  avec la dernière protéine du pathway et si la taille limite n'est pas atteinte,
		for m in next_: # pour une interaction dans l'ensemble des interactions possibles de pathway[-1]
			if m not in pathway:
 
				yield from chain(maillon, pathway + [m]) #On rajoute une autre prot à la chaine uniquement si la protéine que l'on rajoute n'est pas déjà apparue dans la chaine
 
			else:
				if len(pathway) >=2:
 
					if m==pathway[-2]:
						if len(next_)==1:
							yield pathway
 
 
						if len(next_)>1:
							continue
 
					if m!=pathway[-2]:
 
						if len (next_)==2:
							yield pathway
 
 
						if len (next_)>2:
							if m in pathway and pathway not in L:
								L.append(pathway)
								yield pathway
 
for k in dd: # Pour chaques prot du dico
	for z in chain(dd, pathway = [k]): #Pour chaques chaines
		print (' '.join(z))
Merci de votre aide