djzon
(Djzon)
7 Czerwiec 2014 19:56
#1
Jak porównać 2 pliki tekstowe i “odrzucić” duplikaty?
Np. plik tekstowy zajmuje 4 MB.
Dodam, że nie można tego wykonać w Open Office (zawieszanie programu - prawdopodobnie nie obsługuje dużego pliku tekstowego)
Plugin Compare 1.5.6 do Notepad++ - cały czas 25% CPU i przetwarza chyba coś “bez końca” - to też odpada.
Probowałem jeszcze inne sposoby znalezione w sieci ale bezskutecznie, zadnym sposobem/programem - nie mozna tego zrobić.
Wszystko się zawiesza lub trwa bez końca przetwarzanie… i maksymalnym obciążeniem CPU…lub brakiem odpowiedzi
Pliki tekstowe zawierają tylko zwykłe linki i nic więcej…
W Wordzie w Windows 7 otwiera plik tekstowy bez problemu i szybko…
Masz dwa pliki tekstowe z linkami i chcesz stworzyć jeden by nie było duplikatów?
Pliki tekstowe maja rozszerzenie txt. Ty używasz Open Office więc zapewne to doc. Zgadza się? Możesz zapisać do txt?
Z plików txt, wydaje mi się że można to szybko to zrobić skryptem w Pythonie. Jak coś to pisz.
djzon
(Djzon)
8 Czerwiec 2014 00:04
#3
Żaden DOC
Zwyczajne TXT . Napisałem przecież pliki tekstowe!
Używam OpenOfficeCalc (!)
Nie proponowac mi żadne Pythony i ciągle Linuxa. Nie używam Linuxa, nie znam się na nim i "języki C++ , Python - to dla mnie czarna magia.
Total Commander - nie nadaje się do tego! Czytać uważnie, że są to tylko pliki tekstowe z linkami.
roobal
(roobal)
8 Czerwiec 2014 00:04
#4
Jeśli nie istnieje Diff lub alteratywa dla Windows. Możesz pobrać livecd dowolnej dystrybucji Linuksa i skorzystać z Diff.
Python jest wieloplatformowy, a to że na Linuksie zrobisz to szybciej, niż w Windows, to nie miej pretensji do innych. Może w PowerShellu coś da radę zdziałać, ale to już musi się znaleźć spec od PowerShella.
djzon
(Djzon)
8 Czerwiec 2014 00:11
#5
Nie ma na świecie żadnych programów pod Windows 7 ?, które obsługują porównywanie linków? Może lista programów (może nie znam wszystkich) a chętnie wypróbuje kolejne…(oprócz te co są na dobreprogramy)
Powershell - jest dobry ale potrzebny kod do niego.
PSPad lub …WinMerge - porównuje ale tylko podświetla ale nie oddziela więc to jest złe rozwiązanie w przypadku długiej listy…
Bez obrazy…Chyba poraz kolejny będę musiał odwiedzić angielskie fora, tak będzie szybciej i więcej odpowiedzi, i więcej obeznanych ludzi jest
Trochę to jest pilne, poczekam do jutra…
EDIT:
Np. ta stronka ma limit do 1 MB (więc też odpada)
http://www.diffnow.com/
roobal - podsunąłeś mi nazwę i znalazłem program…Jeśli można przetestować Pro versję to jutro sprawdzę taki program:
ExamDiff Pro
EDIT:
Program rozbudowany, wielofunkcyjne ale szkoda gadać.
Nic usuwa duplikatów
Jakaś mądra głowa przydałaby się aby go “rozgryść” bo ja nadal nie wiem jak porównać
http://secretgeek.net/ps_duplicates.asp
Jeśli oczywiście każdy link jest w oddzielnej lini.
Jak się nie uda to:
zainstaluj pythona 2.7 nie 3!
https://www.python.org/ftp/python/2.7.7/python-2.7.7.msi
Pierwszy z plików tekstowych zapisz jako file1.txt drugi jako file1.txt. (na końcu każdego pliku powinna być pusta linia, jak jej nie ma to ja dodaj.
Zapisz ten tekst jak remdup.py
a1=open(‘file1.txt’,‘rb’).readlines()+open(‘file2.txt’,‘rb’).readlines()
a1=list(set(a1))
open(‘wynik.txt’,‘wb’).writelines(a1)
uruchom go przez dwuklik lub z konsoli poleceniem python remdup.py
powinien Ci powstać plik wynikowy wynik.txt z usuniętymi duplikatami. Kolejność wierszy nie jest zachowana. Można chyba, też w miarę łatwo zrobić z zachowaniem kolejności ale będzie to długotrwałe.
Jakby był jakiś problem to pisz.
djzon
(Djzon)
8 Czerwiec 2014 18:46
#7
Nie mam czarnego pojęcia co i jak. Po za tym jakieś błędy powstają… może coś źle robie
Nie lubię się “bawić” w polecenia.
Zależy mi na szybkim porównywaniu (nie jednego a wielu plikówTXT z linkami), a tu za każdym razem muszę wklepywać jakiś kod.
dragonn
(dragonn)
8 Czerwiec 2014 19:48
#8
Spróbuj meld, jest wersja na Win i radzi sobie dosyć dobrze z dużą ilością danych (potrzebuje tylko czasu aż wszystko załaduje).
djzon
(Djzon)
8 Czerwiec 2014 20:10
#9
dragonn - nie wypróbuje tego programu bo nawet brakuje .exe lub .msi/setup - więc jak to uruchomić? - Zerowe wytłumaczenie co i jak = program odpada!
Pewnie pobrałeś wersję meld na linuksa. Wersja pod windows której nie sprawdzałem jest tutaj:
http://sourceforge.net/projects/meld-installer/
Masz problem z wersją pythonową? Tam nie musisz wpisywać poleceń. Po prostu jeden plik nazywasz file1.txt drugi file1.txt i dwukrotnie klikasz na remdup.py .
Jakieś błędy Ci wyskakują? Co się dzieje?
Po co Ci to o czym mówisz? Być może powinieneś kogoś do tego wynająć.
dragonn
(dragonn)
8 Czerwiec 2014 20:58
#11
Jak nie umiesz instalatora nawet znaleźć… -.- http://meldmerge.org/ " not-yet-official installer" http://sourceforge.net/projects/meld-installer/
djzon
(Djzon)
8 Czerwiec 2014 21:02
#12
To tylko niewielki przykład:
Pierwsza lista:
np.
http://site.com/ab12345
http://site.com/ab12346
http://site.com/ab12347
http://site.com/ab12348
http://site.com/ab12376
http://site.com/ab12307
Druga lista:
http://site.com/ab00345
http://site.com/ab92346
http://site.com/ab12345
http://site.com/ab12346
więc wynikiem powinno być:
http://site.com/ab00345
http://site.com/ab92346
A w tym programie jest zupełnie inny wynik, druga - długa lista a powinno byc tylko kilka… więc nie tego sie spodziwałem.
po co te podświetlenie? Mi chodzi tylko o listę, nowe linki, których brak w 1 liście
=======================
Innym programem także nie można tego zrobić.
Odpowiedź administratora:
There's no direct way to delete duplicates with ExamDiff Pro. The rest can be done for for the former you need a different tool.
A to wreszcie wytłumaczyłeś o co Ci chodzi. Trzeba było to zrobić od razu. W takim razie tamten skrypt w Pythonie też Ci nie pomoże. Zapewne można by było napisać inny skrypt w Pythonie.
Chyba gotowego programu do tego nie znajdziesz. Chociaż może się jeszcze nim pobaw.
Jak pierwsza lista to:
http://site.com/jeden
Druga lista to
http://site.com/dwa
To wynikiem jest:
http://site.com/jeden
http://site.com/dwa
czy tylko:
http://site.com/dwa
?
djzon
(Djzon)
8 Czerwiec 2014 21:29
#14
Wynikiem jest tylko
http://site.com/dwa
ponieważ na pierwszej liście nie ma tego
Czyli chodzi Ci o różnice zbiorów. W Pythonie to będzie tak http://pastebin.com/h8YekghE
Zapisz to jako remove.py skopiuj tam pliki file1.txt i file2.txt i dwukrotnie kliknij na remove.py . Pliki txt muszą mieć enter na końcu.
Oczywiście najpierw zainstaluj pythona z tego linku co podałem wcześniej. Jakby były jakieś problemy to pisz.
Wydaje mi się że szukanie programu będzie bezowocne (no, ale mogę się mylić).
Ewentualnie przerobić program by pobierał nazwy plików z lini poleceń i dorobić do tego graficzny interfejs jakimś generatorem.
Mówisz o skrypcie w pythonie? U mnie dziala poprawnie, wiec wszedzie powinien. Tu masz wersje z plikami testowymi i napisz czy dziala poprawnie:
http://tinyurl.com/qyrb7jn
djzon
(Djzon)
8 Czerwiec 2014 22:57
#17
Może jednak działa Twój skrypt
Nie znalazło teraz duplikatów, więc chyba jest OK.
Ale muszę dokładniej to sprawdzić z większymi listami.
Ale nie dziś po późno jest…
Jutro rano na spokojnie przeanalizuje i sprawdzę dokładniej i dam Ci znać tutaj lub na PM.
somekind
(somekind)
14 Czerwiec 2014 12:51
#18
Istnieje jakiś milion alternatyw, a żeby użyć diffa pod Windowsem wystarczy zainstalować np. GnuWin. Nie trzeba żadnego linuksa do tego.
Python jest wieloplatformowy, a to że na Linuksie zrobisz to szybciej, niż w Windows, to nie miej pretensji do innych.
Jeśli ktoś nie umie programować, to nie zrobi tego pod żadnym systemem. Jeśli umie, to zrobi pod każdym w zbliżonym czasie.
LOL
PowerShell może wszystko to, co .NET, więc dużo więcej niż gołe linuksowe terminalki.
Wystarczy taki skrypt:
param([parameter(Mandatory=$true)][string] $firstFile, [parameter(Mandatory=$true)][string] $secondFile)
$firstSet = [System.IO.File]::ReadAllLines("$(Get-Location)\$firstFile")
$secondSet = [System.IO.File]::ReadAllLines("$(Get-Location)\$secondFile")
$result = $secondSet | ?{ $firstSet -notcontains $_ }
[System.IO.File]::WriteAllLines("$(Get-Location)\diff.txt", $result)
echo 'Done'
I uruchomić go tak:
. .\Filediff.ps1 'first.txt' 'second.txt'
djzon
(Djzon)
16 Czerwiec 2014 08:54
#19
Python jest wieloplatformowy, a to że na Linuksie zrobisz to szybciej, niż w Windows, to nie miej pretensji do innych.
W 2 sekundy pokazało wynik (plik tekstowy), więc nie rozumiem co znaczy szybciej w Linuksie?
Zainstalowałem pythona 2.7
Wykorzystałem scrypt użytkownika KamilDz
Po prostu wcześniej nie miałem do czynienia z tym językiem programistyczny jeśli dobrze mówię i zawsze wydawało mi się, że trzeba pisać żmudne wiersze kodu.
Przyznam się, że mam przyjaciela Rosjanina i on doskonale zna się na pisaniu oprogramowania i skryptów i podsuwał mi gotowe skrypty do różnych zastosowań (ale działały w przeglądarce np. w KONSOLI)