Ho due grandi file di testo, ciascuno vicino a 2 GB. Mi serve qualcosa come diff f1.txt f2.txt
. C'è un modo per fare questo compito veloce in Python? Lo standard difflib
è troppo lento. Presumo che ci sia un modo più veloce, perché difflib
è completamente implementato in Python.diff due grandi file in Python
risposta
Come utilizzare difflib in modo che lo script possa gestire file di grandi dimensioni? Non caricare i file in memoria, ma scorrere i file dei file e diff in blocchi. Ad esempio, 100 righe alla volta.
import difflib
d = difflib.Differ()
f1 = open('bigfile1')
f2 = open('bigfile2')
b1 = []
b2 = []
for n, lines in enumerate(zip(f1,f2)):
if not (n % 100 == 0):
b1.append(lines[0])
b2.append(lines[1])
else:
diff = d.compare("".join(b1), "".join(b2))
b1 = []
b2 = []
print ''.join(list(diff))
diff = d.compare("".join(b1), "".join(b2))
print ''.join(list(diff))
f1.close()
f2.close()
sì, stavo provando una sceneggiatura simile. Troppo lento :( –
L'altra opzione veloce e portatile sarebbe chiedere agli utenti di installare diff utility per la piattaforma e quindi utilizzarla tramite python wrapper. –
Il 'difflib' di Python è lento solo non importa quello che fai. 1 MB ciascuno, prendi 0,5 secondi al migliore dei casi e pochi minuti nel caso peggiore. Il differenziale binario richiede 0,033 secondi. – Pithikos
Perché non utilizzare 'diff f1.txt f2.txt'? – delnan
@delnan: perché renderà la mia piattaforma di script dipendente. Ottenere la differenza tra i file è solo una delle altre parti dello script –
È possibile provarlo con l'accelerazione di psyco o con Unladen Swallow o PyPy build? – ncoghlan