Tengo dos archivos de texto grandes, cerca de 2GB cada uno. Necesito algo como diff f1.txt f2.txt
. ¿Hay alguna manera de hacer esta tarea rápido en Python? El estándar difflib
es demasiado lento. Supongo que hay una manera más rápida, porque difflib
está completamente implementado en Python.diff dos archivos grandes en Python
Respuesta
¿Qué le parece usar difflib de forma tal que el script pueda manejar archivos grandes? No cargue los archivos en la memoria, sino itere a través de los archivos de los archivos y dif en fragmentos. Por ejemplo, 100 líneas a la vez.
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í, estaba intentando una secuencia de comandos similar. Demasiado lento :( –
Su otra opción rápida y portátil sería pedirle a los usuarios que instalen la utilidad diff para la plataforma y luego usarla a través del wrapper de Python. –
El 'difflib' de Python es lento sin importar lo que haga. Dos archivos casi idénticos de 1MB cada uno, tómeme 0.5seg en el mejor de los casos y unos minutos en el peor de los casos. La diferencia binaria toma 0.033s. – Pithikos
- 1. Archivos Diff presentes en dos directorios diferentes
- 2. Diff dos pestañas en Vim
- 3. lectura bastante grandes archivos JSON en Python
- 4. Analizando archivos pseudo-xml grandes en python
- 5. ¿Generar archivos XML muy grandes en Python?
- 6. Compresión de archivos grandes con python
- 7. DUnit Comparar dos archivos de texto y mostrar Diff
- 8. Comparación de dos archivos de texto en python
- 9. newline-ignooring diff/diff en múltiples líneas/reflow-ignooring diff
- 10. git diff --word-diff con archivos en línea
- 11. Creación de parches Delta Diff de archivos binarios grandes en C#
- 12. ¿Cómo encontrar cadenas comunes entre dos archivos muy grandes?
- 13. Mercurial: enumere archivos "hg diff"
- 14. Generar bastante html diff en Python
- 15. Optimización para encontrar y reemplazar archivos grandes en Python
- 16. ¿Cómo se descomprimen archivos muy grandes en python?
- 17. Manejo de archivos netCDF muy grandes en python
- 18. Comparar dos archivos
- 19. comparar dos archivos en UNIX
- 20. Excluir archivos de git-diff
- 21. Resharper con archivos grandes o * muy * grandes
- 22. ¿Cómo puedo dividir archivos grandes?
- 23. Rechazar archivos grandes en git
- 24. ¿Cómo puedo distinguir dos archivos en Perl?
- 25. Incluyendo nuevos archivos en SVN diff
- 26. Procesando archivos xml grandes
- 27. Subidas de archivos grandes
- 28. java: ¿escribir archivos grandes?
- 29. CodeIgniter Cargando archivos grandes
- 30. ¿Cómo contar las diferencias entre dos archivos en Linux?
¿Por qué no utilizar 'diff f1.txt f2.txt'? – delnan
@delnan: porque hará que mi plataforma de script sea dependiente. Obtener diff de archivos es solo una de las otras partes del script –
¿Es factible probarlo con psyco acceleration o con Unladen Swallow o PyPy build? – ncoghlan