Concatenation de fichiers
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:
Code:
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 |
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:
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).
Code:
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") |
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é...
Si vous pouviez m'aider ça me dépannerait :mrgreen:
Merci à vous :)