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


(Djzon) #1

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 )


(Paulikpro) #2

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:


(GL1zdA) #3

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


(Djzon) #4

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

Co mnie obchodzą jakieś sumy kontrolne?


(GL1zdA) #5

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


(Djzon) #6

GL1zdA - sprawdzałeś czy działa?

Przykład w 1 poście.


(StawikPiast) #7

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.


(Djzon) #8

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.


#9

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.


(Djzon) #10

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.


(somekind) #11

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


(StawikPiast) #12

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).


(somekind) #13

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.


(Djzon) #14

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 ..


(StawikPiast) #15

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 :wink:, 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.


(kostek135) #16

@OP


(Djzon) #17

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


(StawikPiast) #18

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?


(Djzon) #19

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??


(Pirx) #20

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".