Bonjour,
Voila ça va faire maintenant plus d'une semaine que je suis sur ce code qui ne m'affiche pas ce que je souhaite :aie:
J'ai un dictionnaire qui se présente sous cette forme et que j'ai remplie à partir d'un fichier f :
Dans un fichier en parallèle j'ai différentes lignes avec seulement les valeurs du dictionnaire présentes (qui représente les numéros de lots) séparés par des tabulations. Ces valeurs ont un underscore qui suit + des caractères alphanumériques. J'ai du au préalable récupérer les lignes qui correspondait à mon dictionnaire pour éviter un traitement plus long...Code:{ 'banana': 'sp_345', 'apple': 'ap_456', 'pear': 'pe_367', ...}
Les valeurs qui se présente comme "g56789" ne m'interesse pasCode:
1
2
3
4 ap_456_6254 sp_345_6547 s5678990 u7788990 a1234 sp_345_4132 ... pe_367_4543 ap_456_54356 s567888 t6678890 u89088098 r6576868 ... s78987 t345678 ap_456_54356 g56789 o3456789 f345678 ... ...
Ce que je souhaite c'est compter le nombre de fois, pour 2 clés différentes, qu'ils apparaissent tout les deux sur la même ligne
Par exemple, les valeurs des clés banana et apple apparaissent sur la ligne 1 donc peut importe le nombre de fois qu'elles apparaissent elle sont quand même présente, et donc on compte 1 ligne en commun, et je souhaite le faire sur toutes les lignes du fichier
Pour cela j'ai ajouté le pattern '_.' derrière chaque valeur pour ensuite faire une regex avec la fonction re.search
Voilà mon script (qui a aussi bénéficié d'une aide extérieur) :
f2 = open("merchandise","r")
for li in f2.readlines():
li = li.rstrip("\n")
pattern_num_id = re.search(num_lot+'_\w+', li)
if pattern_num_id :
list_fruit = li
for key1, key2 in product(mydico,mydico):
if key1 >= key2:
continue
counter[key1, key2] = 0
k1 = k2 = False
for el in li:
match_key1 = re.search(mydico[key1]+'_\w+', li)
match_key2 = re.search(mydico[key2]+'_\w+', li)
if match_key1 :
k1 = True
elif match_key2 :
k2 = True
if k1 and k2:
counter[key1, key2] += 1
break
for key, val in counter.items():
print(*key, val)
f.close()
f2.close()[/CODE]
Le soucis c'est que c'est terriblement lent d'une part.... et d'autre part il m'affiche bien les clé 2 à 2 mais que avec un compteur de 0....
Si quelqu'un peut m'aider ^^'Code:
1
2
3
4
5
6 Banana apple 0 Banana pear 0 Banana .... 0 Apple Banana 0 Apple Pear 0 Apple ... 0