Salut salut !
Je débute en Python et je souhaite concaténer deux fichiers en 1 seul suivant certaines conditions.
Voiçi mes 2 fichiers:
Je souhaite les concaténer de façon à ce que les valeurs associées à chaque ligne correspondent (voilà ce à quoi je devrais m'attendre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 file1: toto tata 123 foo bar 456 truc machin 789 file2: toto tata 321 bidule machin 753
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 outfile: toto tata 123 321 foor bar 456 0 truc machin 789 0 bidule machin 0 753
Mon code fonctionne plutôt bien quand la ligne est présente dans infile2 et pas dans infile1 mais ne fonctionne pas dans l'autre sens. De plus je dois effectuer ce traitement sur des fichiers relativements grands (>10M lignes).
Comme vous pouvez le voir je boucle sur un dictionnaire pour identifier ou non la présence d'une ligne dans l'autre fichier. Je pourrais résoudre mon problème en créant un second dictionnaire et en comparant les deux mais comme je dois effectuer ceci pour de grand fichiers ce n'est pas très adapté...
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 def concatenate(infile1, infile2, outfile): dict1=dict() with open(outfile, "w+") as out: with open(infile1, "r") as in1: for line in in1: line=re.split("\s+", line) dict1[line[0]+line[1]]=line[2] with open(infile2, "r") as in2: for line in in2: line=re.split("\s+", line) if dict1.get(line[0]+line[1]) != None: print_file(out, line[0], line[1], dict1[line[0]+line[1]], line[2]) else: print_file(out, line[0], line[1], 0, line[2]) def print_file(f, string1, string2, int1, int2): f.write("%s\t%s\t%d\t%s\n" %(string1, string2, int(int1), int(int2))) concatenate("test1", "test2", "out.txt")
Si vous pouviez m'aider ça me dépannerait
Merci à vous![]()
Partager