Bonjour,

Je dispose d'un (grand) tableau de valeur dont voici un exemple simple :
#test
1 A id1 6 20
2 A id2 7 0
3 B id3 89 76
4 B id4 9 9

Dans un autre fichier, j'ai les informations suivantes
tr1 A 8 12
tr2 A 5 2
tr3 B 78 85

Mon but est d'associer les informations d'associer les identifiants 'tr' du second fichier aux 'id' du premier fichier si les bornes des tr sont comprises dans celles des id. Par exemple : tr1 id1 A 1
(8 et 12 compris entre 6 et 20)
J'ai écris ce script qui fonctionne et me donne le résultat attendu:
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
 
import sys
 
f1 = open(sys.argv[1], 'r')
 
df1 = {}
for line in f1:
    if line.startswith("#"): continue
    tmp = line.replace('\n', '').split('\t')
    df1[tmp[2]] = [tmp[0], tmp[1], int(tmp[3]), int(tmp[4])]
 
f2 = open(sys.argv[2], 'r')
 
 
for line in f2:
    tmp = line.split('\t')
    for i in df1:
        if df1[i][1]==tmp[1] and int(tmp[2]) in range(df1[i][2],df1[i][3]) and int(tmp[3]) in range(df1[i][2],df1[i][3]):
            print tmp[0],'\t',i,'\t',df1[i][0],’\t’,df1[i][2]
Le problème est que les fichiers d'entrée contiennent des centaines de milliers de lignes et l'exécution prends des jours.
L'idée pour aller plus vite était de créer plusieurs dictionnaires en lieu et place de df1 et de tester la présence du A ou du B :
df1_1{id1:[1,A,6,20];id2:[2,A,7,0]}
df1_2{id3:[3,B,89,76];id4:[4,B,9,9]}

Mon problème est que je n'arrive pas à créer 'automatiquement' ces petits dictionnaires, pourriez-vous m'aider ?

J'espère que j'ai été assez clair, si ce n'est pas le cas, j'essaierais de clarifier au mieux la situation,

Merci d'avance