Witam.
Mam pytanie. Potrzebuję napisać aplikację usuwającą duplikaty z pliku po porównaniu go z drugim plikiem. Plik "A" to baza numerów np. PESEL a plik "B" to baza z numerami do porównania. Z bazy "B" muszę usunąć numery znajdujące się już w bazie "A" i po usunięciu dopisać nowe do bazy "A". Zaczynam dopiero programować w Pythonie i nie bardzo wiem jak się za to zabrać :)
Ma ktoś jakiś pomysł na efektywny program (baza będzie rosła i będzie miała dużą liczbę numerów).
- Rejestracja:prawie 7 lat
- Ostatnio:prawie 6 lat
- Postów:7
- Rejestracja:prawie 7 lat
- Ostatnio:prawie 6 lat
- Postów:7
anonimowy napisał(a):
Rozumiem, że ta baza to konkretnie muszą być pliki tekstowe i w każdej linii masz numer PESEL tak?
Dokładnie tak
- Rejestracja:ponad 9 lat
- Ostatnio:4 miesiące
- Postów:227
-
najpierw stworz plikA i plikB - mozliwosci jest wiele w zaleznosci o ilosc i tego jak te dane maja wygladac
np; json, xml , yaml, baza danych, csv, jsonlines , txt, ini czy cokolwiek innego. -
stworz "program" ktory wczytuje zawartosc plikow A i B do jakichs struktur danych wszystko zaleznie jaka beda mialy strukture danych te twoje dane w plikach.
Potem sobie mozesz porownywac to co masz na milion sposobow.
- Rejestracja:prawie 16 lat
- Ostatnio:5 miesięcy
- Postów:2514
Generalnie w każdym języku robisz to mniej więcej tak samo. Otwierasz plik A, wrzucasz wszystko do czegoś w stylu HashSet (jakkolwiek to się nazywa w danym języku), i potem czytasz czytasz drugi plik, wywalasz wszystko co jest w secie (w pseudokodzie cos w stylu: ret = []; foreach (el in B) if !A.contains(el) ret.push(el)
). Nie rozumiem po co później je dopisywać do A skoro A już je zawiera.
- Rejestracja:prawie 16 lat
- Ostatnio:5 miesięcy
- Postów:2514
@pajzano78: jak użyjesz HashSet (odpowiednika w pythonie) to wystarczy dodać, nie da się dodać duplikatów do HashSeta (zgodnie z ustaloną funkcją hashującą i testującą, która dla stringów z reguły działa zgodnie z oczekiwaniami w każdym języku)
- Rejestracja:ponad 9 lat
- Ostatnio:4 miesiące
- Postów:227
W pythonie sa sety tj: 'set'. Poczytaj w dokumentacji jak to dziala i jakie metody sa wbudowane.
Te sety to tak naprawde zbiory wiec musisz dobrac odpowiednie operacje na zbiorach zeby wyselekcjonowac to co chcesz.
Wszystko masz w dokumentacji tu sa linki:
https://docs.python.org/2/library/sets.html
https://docs.python.org/3.6/library/stdtypes.html?highlight=set#set
- Rejestracja:ponad 9 lat
- Ostatnio:prawie 4 lata
- Postów:47
Najszybciej będzie do siebie dodać dwie listy do siebie, i następnie zrobić z niej set (w skrócie lista bez powtórzeń) koniec.



- Rejestracja:około 8 lat
- Ostatnio:około godziny
- Postów:4902
Tak mi się to widzi:
def rem_duplicates(xs, ys):
ys = set(ys)
for elem in xs:
if elem in ys:
ys.remove(elem)
return xs + list(ys)
Jak już Będziesz miał w listach xs
i ys
otwarte pliki, złożoność powinna być liniowa.