Scrypt do porównania dwóch plików .TXT i usuwanie powtórzeń

Scrypt do porównania dwóch plików .TXT i usuwanie powtórzeń.

Posiadam scrypt ale NIE DZIAŁA  w przypadku “dużych plików” i nie wiem czy można coś na to poradzić ??

Napisałby ktoś dla mnie “prosty scrypt Python”?

 

 

 

Jak porównać 2 pliki tekstowe i usunąć powtórzenia.

 

Plik 1 zawierający listę linków lub (pełne ścieżki do plików[PATH] na dysku/partycji)

http://strona.pl/id9876543345698_0
http://strona.pl/id8765_000

Plik 2 zawierający listę linków lub (pełne ścieżki do plików[PATH] na dysku/partycji)

http://strona.pl/id7767_876098
http://strona.pl/id98765_5476543
http://strona.pl/id9876543345698_0
http://strona.pl/id8765_000

Wynikiem powinno być:

http://strona.pl/id7767_876098
http://strona.pl/id98765_5476543

Najważniejsze scrypt - musi obsługiwac DUŻE pliki tekstowe np. 1… 2 GB (UTF- 8 )

Po co porównywać całą zawartość, jak można sumy kontrolne, albo jeszcze lepiej - rozmiar plików dokładności do bitów (nie bajtów) i ewent. pierwszą linijkę kodu. Jest niezwykle małe prawdopodobieństwo, żeby były dwa inne pliki z taką samą ilością bitów i takim samym początkiem. Ewentualnie jeśli dwa pliki z taką samą ilością bitów i takim samym początkiem zostaną wykryte zostanie wykonany pełny odczyt pliku.

Przedstawiłem Ci oto ten algorytm. 2/3 roboty wykonane :slight_smile:

 

Pozdrawiam,

 

PaulikPro

 

PS Podpisuję się tylko, gdy wykonam dużo roboty :slight_smile:

A musi być koniecznie w Pythonie? Nie możesz po prostu zrobić cat plik1.txt plikt2.txt | sort -u ?

PaulikPro - P co? Po to, żeby tacy ludzie jak Ty się dziwili.

Co mnie obchodzą jakieś sumy kontrolne?

Tu masz rozwiązanie dla PowerShell: Using windows/dos shell/batch commands, how do I take a file and only keep unique lines?

GL1zdA - sprawdzałeś czy działa?

Przykład w 1 poście.

Zaladuj do SQL-a i tam porównaj. w końcu do tego powstał :slight_smile:

Sa narzedzia do ladowania daych do SQL-a, np SSIS, tym zaladuj dane a potem porownaj I wyswietl distinct.

StawikPiast - nie wiem o czym Ty do mnie mówisz… dla mnie to abstrakcyjne pojęcia… całkowicie niezrozumiałe.

Nie mam nic wspólnego z programowaniem.

Wybacz, ale domagasz się od innych zrobienia czegoś za Ciebie i nawet nie raczysz sam sobie przetestować? Może zapłać komuś, to Ci to zrobi, przetestuje i odda gotowca.

Areh - skrypt, skryptem ale jak go wykorzystać, co nalezy edytowac, zmienić a co najważniejsze jak mam dodać 2 pliki do porównania… Mam wpisac jakieś ścieżki czy cuś - w jakim miejscu scryptu? Jak dla mnie za ogólnikowe wytłumaczenie.

Nie jestem “mocny” w tej dziedzinie.

Ty tak na poważnie chcesz człowiekowi maksymalnie utrudnić życie?

Jakie utrudnić?

SSIS wlaśnie ulatwia życie. Dzien w dzien wykonuje takie operacje (tzn robia sie same po moim ich oprogramowaniu) i jest to naprawde bardzo latwe i fajne narzedzie.

Skoro nie masz pojecia o pisaniu skryptow to zrob to w excelu, Najpierw wyżuć powtóżenia wyświetlając z obu tabel unikalne wartości a potem je porownaj np v_lookup lub wżuć do tabeli przestawnej i niech ona to wyliczy. Poczytaj wczesniej o tabelach przestawnych (chodzi o counta wartosci).

Instalowanie SSIS w celu porównania plików tekstowych? Szalony pomysł, trochę jak kupowanie browaru, żeby się napić wody.

Excel potrafi się zaciąć na pliku kilkadziesiąt MB, a co dopiero 2GB.

somekind - a co nie ma gotowych programów w internecie, gdzie nie trzeba żadnych skryptów i bez żadnego kombinowania… Na pewno są gotowe programy (jest całe mnóstwo, moż e wobcym języku) ale na pewno są …ale nie jestem w stanie sprawdził tysiące programów nraz …instalować wszystko i testować… Nie szukać na dobreprogramy ale sa inne strony gdzie jest znacznie więcej programów …nawet tych mało znanych… i mniej popularnych albo w wersji płatnej… Jak ktoś zna dobry program to pisać … ale potarzam …sama nazwa nie wystarczy … musi być sprawdzony przez “Ciebie” , ze na pewno działa …

Kwestia jak często musi to wykonywać, jak jednorazowo to oczywiście bez sensu, a jak codziennie to jak najbardziej jest to prawidlowe narzedzie. Ale Manaement studio ma możliwość zaimportowania tabeli z pliku, co tak naprawdę jest paczką SSIS pod spodem ;), co do jednorazowego porownania danych jest jak najbardziej odpowiednie.

 

“Excel potrafi się zaciąć na pliku kilkadziesiąt MB, a co dopiero 2GB.”

 

Potafi przetwozyc i pare giga danych, mozna skozystac z powerpivota on wykonuje kompresje danych I takie 2 GB danych tekstowych skurcza sie do pewnie kilkudziesieciu, kilkuset mega w RAM. Do tego wersja 64 bit i możesz bardzo dużo danych przetwarzać.

Czyli nie chce mi sie dajcie mi gotowca. Stary zapomnij.

@OP

kostek135 - Problemem było oprogramowanie… W nowszej wersji Python scrypt - działa poprawnie…

Jak porównasz to pozostanie już tylko distinct z wyniku wiec większość roboty już masz.

Ale żeczywiście widzę że ty chcesz żeby ktoś ci to napisał.

Ile płacisz?

StawikPiast - Już porównałem - tak jak chciałem na dużym pliku TXT Zainstalowałem najnowszą wersję 2.7.8 64-bit i teraz działa.. może  w poprzedniej był jakiś błąd lub bug

 

a tak na marginesie… Orientujesz się jaki regex używa Edit Pad Lite lub Pro … bo na 100% wpisuje poprawny a pokazuje, że nic nie znaleziono… może program uzywa innej formy regex??

A może Perl da radę?

#!/usr/bin/perl

use strict;
use warnings;

my %wynik;

open(my $plik1, "<", "tekst1.txt");
while (<$plik1>) {
    chomp;
    $wynik{$_}++;
}
close $plik1;

open(my $plik2, "<", "tekst2.txt");
while (<$plik2>) {
    chomp;
    $wynik{$_}++;
}
close $plik1;

open(my $plik3, ">", "wynik.txt");
foreach my $x ( keys %wynik ) {
    if ($wynik{$x} == 1) {
        print $plik3 "$x\n";
    }
}
close $plik3;

Czy zadziała z gigabajtowymi plikami nie wiem, bo takich nie posiadam. Zmień nazwy “tekst1.txt” i “tekst2.txt” na Twoje pliki. Wynik zapisywany jest do pliku “wynik.txt”.