Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/06/2014, à 12:32

certes

cherche reseau de valeur dans fichier txt

Bonjour,

un partir d'un fichier txt qui s'appelerait info.txt et qui contiendrait ce type d'information :

fia__14  -- fia__28; 
fia__14  -- wia_276; 
fia__14  -- wia_282; 
fia__14  -- Yia_285; 
Yia__27  -- fia__28; 
Yia__27  -- fia__29; 
Yia__27  -- Yia__67; 
fia__29  -- fia__48; 
fia__29  -- Yia__67; 
Yia__34  -- fia__35; 
Yia__34  -- wia__38; 
Yia__34  -- Yia__37; 
Yia__34  -- fia__48; 
fia__35  -- wia__38; 
fia__35  -- fia__48; 
Yia__37  -- wia__38; 
fia__48  -- Yia__67; 
wia__52  -- Yia__95; 
wia__52  -- Yia_110; 
Yia__67  -- wia_121; 
Yia__92  -- Yia_137; 
Yia__92  -- wia_171; 
Yia_110  -- wia_144; 
wia_121  -- Yia_130; 
fia_128  -- fia_315; 
Yia_137  -- wia_171; 
wia_177  -- fia_196; 
wia_177  -- fia_230; 
wia_177  -- wia_233; 
fia_196  -- fia_230; 
fia_196  -- wia_233; 
Yia_201  -- Yia_210; 
Yia_201  -- fia_246; 
Yia_201  -- wia_276; 
Yia_201  -- Yia_285; 
Yia_210  -- wia_255; 
Yia_210  -- fia_246; 
fia_218  -- wia_255; 
fia_230  -- wia_233; 
fia_246  -- Yia_275; 
Yia_275  -- wia_276; 
wia_276  -- wia_282; 
wia_276  -- Yia_285; 
wia_282  -- Yia_285; 

je souhaiterais isoler l'ensemble des valeurs qui sont liées à une valeur précise

par exemple si je cherche Yia__92  dans les lignes qui précède je retrouverais les ligne suivantes

Yia__92  -- wia_171;
Yia_137  -- wia_171;
Yia__92  -- Yia_137;

donc ici je trouve tous ceux qui sont liés avec Yia__92
c'est à dire wia_171 et Yia_137
et puis je cherche ceux qui sont liés à wia_171 outre Yia__92 
et je retrouve Yia_137
puis je recherche Yia_137 et je n'en trouve plus d'autre => fin d'analyse = valeurs inscrite dans un nouveau fichier

si je cherche wia_177 je trouve

wia_177  -- fia_196; 
wia_177  -- fia_230; 
wia_177  -- wia_233; 
fia_196  -- fia_230; 
fia_196  -- wia_233; 
fia_230  -- wia_233; 

etc ...

j'imagine qu'il y a moyen de faire un script qui automatiserait cela ... quelqu'un peut il m'aider ?
pensez vous possible d'en faire une variante en perl ?

D'avance

Hors ligne

#2 Le 03/06/2014, à 14:43

pingouinux

Re : cherche reseau de valeur dans fichier txt

Bonjour,
Voici le script recherche.py, en python3, qui devrait convenir (les lignes en sortie ne sont pas dans l'ordre initial) :

#!/usr/bin/python3

# ./recherche.py val

import sys, re

val=sys.argv[1]

rec=re.compile('(.+_[0-9]+) +-- +(.+_[0-9]+);')
with open('fichier.txt','r') as f :
   liste=[]
   dico={}
   for lig in f :
      k=rec.match(lig)
      if k :
         kg1=k.group(1)
         kg2=k.group(2)
         liste.append([kg1,kg2])
         dico[kg1]=dico.setdefault(kg1,[])
         dico[kg2]=dico.setdefault(kg2,[])
         dico[kg1].append(lig)
         dico[kg2].append(lig)

vals=set(); resul=set(); l_vals0=0
while True :
   for k in liste :
      if val in k :
         vals|=set(k)
         liste.remove(k)
   l_vals=len(vals)
   if l_vals==l_vals0 : break
   l_vals0=l_vals

for v in vals :
   resul|=set(dico[v])

for lig in resul : print(lig[:-1])

À appeler ainsi

./recherche.py valeur_a_chercher

Par exemple

$ ./recherche.py Yia__92
Yia__92  -- wia_171; 
Yia__92  -- Yia_137; 
Yia_137  -- wia_171;

Remarque : Le script est aussi compatible avec python2

Dernière modification par pingouinux (Le 03/06/2014, à 14:48)

Hors ligne

#3 Le 04/06/2014, à 12:49

certes

Re : cherche reseau de valeur dans fichier txt

trop fort !

testé et approuvé et validé !

super merci à toi pinguouinux !!!

PS: au cas ou, si jamais quelqu'un peut proposer une variante perl je suis toujours preneur.

Hors ligne