J'essaie de comparer deux fichiers. Je vais énumérer le contenu des deux fichiers :
File 1 File 2
"d.complex.1" "d.complex.1"
1 4
5 5
48 47
65 21
d.complex.10 d.complex.10
46 5
21 46
109 121
192 192
Il y a totalement 2000 d.complexes dans chaque fichier. J'essaie de comparer les deux fichiers mais le problème est que les valeurs listées sous d.complex.1 dans le premier fichier doivent être vérifiées avec les 2000 entrées d.complex dans le second fichier et si les entrées ne correspondent pas, elles doivent être imprimées. Par exemple, dans les fichiers ci-dessus, le numéro 48 du fichier 1 d.complex.1 n'est pas présent dans le fichier 2 d.complex.1 ; ce numéro doit donc être stocké dans une liste (pour être imprimé plus tard). Ensuite, le même d.complex.1 doit être comparé au d.complex.10 du fichier2 et comme 1, 48 et 65 ne sont pas présents, ils doivent être ajoutés à une liste.
La méthode que j'ai choisie pour y parvenir est d'utiliser des ensembles puis de faire une intersection. Le code que j'ai écrit est le suivant :
first_complex=open( "file1.txt", "r" )
first_complex_lines=first_complex.readlines()
first_complex_lines=map( string.strip, first_complex_lines )
first_complex.close()
second_complex=open( "file2.txt", "r" )
second_complex_lines=second_complex.readlines()
second_complex_lines=map( string.strip, second_complex_lines )
second_complex.close()
list_1=[]
list_2=[]
res_1=[]
for line in first_complex_lines:
if line.startswith( "d.complex" ):
res_1.append( [] )
res_1[-1].append( line )
res_2=[]
for line in second_complex_lines:
if line.startswith( "d.complex" ):
res_2.append( [] )
res_2[-1].append( line )
h=len( res_1 )
k=len( res_2 )
for i in res_1:
for j in res_2:
print i[0]
print j[0]
target_set=set ( i )
target_set_1=set( j )
for s in target_set:
if s not in target_set_1:
print s
Le code ci-dessus donne un résultat comme celui-ci (juste un exemple) :
1
48
65
d.complex.1.dssp
d.complex.1.dssp
46
21
109 d.complexe.1.dssp d.complex.1.dssp d.complex.10.dssp
Bien que la réponse ci-dessus soit correcte, je veux un moyen plus efficace de le faire, quelqu'un peut-il m'aider ? De plus, deux d.complex.1.dssp sont imprimés au lieu d'un, ce qui n'est pas bon non plus.
Ce que j'aimerais avoir, c'est :
d.complex.1
d.complex.1 (name from file2)
1
48
65
d.complex.1
d.complex.10 (name from file2)
1
48
65
Je suis très novice en matière de python et mon concept ci-dessus est peut-être imparfait. De plus, je n'ai jamais utilisé d'ensembles auparavant :(. Quelqu'un peut-il me donner un coup de main ?