Usuwanie duplikatów

0

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

0

Rozumiem, że ta baza to konkretnie muszą być pliki tekstowe i w każdej linii masz numer PESEL tak?

0
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

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

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

0

Jest pewne, że pliki będą csv ewentualnie txt. A jeśli chodzi o tą strukturę to co wykorzystać najlepiej, bo ten PlikA czyli baza będzie miał w przyszłości ponad 100 tys rekordów.

0

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.

0

Źle napisałem. Mają być dopisane te których nie ma, aby baza zawierała nowych Klientów.

0

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

0

Ok. Zobaczymy co z tego wyjdzie bo nie znam za bardzo Pythona ale wiem że jest to język do takich działań. Poczytam o Hashset i mam nadzieje, że uda się stworzyć optymalny kod.

0

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

0

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1