Mam dwa duże pliki tekstowe, około 2 GB każdy. Potrzebuję czegoś takiego jak diff f1.txt f2.txt
. Czy istnieje sposób na szybkie wykonanie tego zadania w pythonie? Standard difflib
jest zbyt wolny. Zakładam, że jest szybszy sposób, ponieważ difflib
jest w pełni zaimplementowany w Pythonie.diff dwa duże pliki w Pythonie
Odpowiedz
Co powiesz na używanie difflib w taki sposób, że skrypt może obsłużyć duże pliki? Nie ładuj plików do pamięci, ale przeglądaj pliki plików i zmieniaj porcje. Na przykład 100 linii na raz.
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()
Tak, próbowałem podobnego skryptu. Zbyt powolny :( –
Inną szybką i przenośną opcją byłoby poproszenie użytkowników o zainstalowanie narzędzia diff dla platformy, a następnie użycie tego za pomocą opakowania Pythona –
"difflib" Pythona jest po prostu powolny, niezależnie od tego, co robisz. Dwa prawie identyczne pliki 1 MB każdego, weź mi 0,5 sekundy w najlepszym przypadku i kilka minut w najgorszym przypadku Binarna różnica wynosi 0,033 sekundy. – Pithikos
- 1. Reading raczej duże pliki json w Pythonie
- 2. Połącz dwa duże pandy.HDFStore Pliki HDF5
- 3. ręcznie scalić dwa pliki używając diff
- 4. Jak podzielić duże pliki?
- 5. W jaki sposób rozpakowujesz bardzo duże pliki w pythonie?
- 6. Porównaj dwa pliki w UNIX
- 7. Porównaj dwa pliki ignorujące zamówienie
- 8. dwa ukośniki w Pythonie
- 9. Neo4j i duże pliki dziennika
- 10. Xampp - PHPMyAdmin przesyła duże pliki?
- 11. Jak rozpakować duże pliki base64 w PHP
- 12. Jak obsługiwać duże pliki w Ruby?
- 13. Wygeneruj dość diff html w Pythonie
- 14. MySQL Binary Storage używając BLOB VS systemu OS Plik: duże pliki, duże ilości, duże problemy
- 15. "Więcej niż dwa bufory w trybie diff" - Jak wyłączyć diff w buforach?
- 16. Jak usunąć duże pliki z Mercurial repo
- 17. AFNetworking + duże pliki do pobrania + pliki do pobrania
- 18. Stream duże pliki binarne z urllib2 złożyć
- 19. Dlaczego FFMPEG zawsze tworzy duże pliki WebM?
- 20. Jak połączyć dwa pliki tcpdump (pliki pcap)?
- 21. Jak można połączyć dwa duże pliki z bardzo małą ilością wolnego miejsca na dysku?
- 22. Jak scalić dwa pliki binarne?
- 23. jak przesłać dwa pliki APK z poziomami API diff pojedynczej aplikacji Android
- 24. Co oznaczają dwa znaki plus w git diff?
- 25. java - napisz dwa pliki atomicznie
- 26. Porównaj dwa pliki z Aptana
- 27. Jak porównać dwa pliki CSV?
- 28. Linux awk łączy dwa pliki
- 29. Jak połączyć dwa generatory w Pythonie?
- 30. Jak mogę odjąć dwa ciągi w pythonie?
Dlaczego nie użyć 'diff f1.txt f2.txt'? – delnan
@delnan: ponieważ spowoduje to, że moja platforma skryptów będzie zależna. Pobierz diff plików to tylko jedna z innych części skryptu. –
Czy możliwe jest wypróbowanie tego przy pomocy przyspieszenia psyco lub kompilacji Unladen Swallow lub PyPy? – ncoghlan