Zakładając że chcesz to przechowywać w pliku w formie tekstowej, nie istnieje w pojęciu pliku coś takiego jak usuwanie jego treści, tylko nadpisanie go nową wersją bez fragmentów które są nam zbędne. Zakładając że będziesz robił to częściej i jesteś na etapie który jeszcze nie zaburzy całej pracy programu, lepiej zapisać strukturę w formacie JSON, albo za pomocą pickle.
Gdybyś stworzył strukturę z Flagami bitowymi, każda flaga odpowiada innemu 'plikowi', możesz selektywnie sobie wybierać te które znajdują się w chociaż dwóch plikach, suma flag bitowych w takich warunkach będzie większa od dwóch i różna od czterech. Wczytanie struktury, będzie efektywniejsze od parsowania pliku, zliczania elementów i tworzenia struktury liczącej za każdym razem. Równie szybko możesz odfiltrować te które potrzebujesz.
Jeśli nie możesz tego już zmienić, i chcesz po prostu usuwać pojedyńcze rekordy ze zbioru plików, to @AsterFV podał dość dobry sposób z jednym wyjątkiem, załóżmy że z każdego pliku chcemy 'usunąć' pojedyńcze wystąpienie, musimy więc wiedzieć w których plikach są pozostałe rekordy.
Najprostsze rozwiązanie jakie ja widzę:
def remove_unique_lines(filenames):
files_container = {}
for filename in filenames:
with open(filename, "r") as f:
files_container[filename] = f.read()
for filename, text in files_container.items():
with open(filename, "w") as f:
for line in text:
if count_from_iterable(files_container.values(), line) > 1:
f.write(line)
def count_from_iterable(iter, search):
counter = 0
for elem in iter:
counter += elem.count(search)
return counter
if __name__ == "__main__":
filenames = ("1.txt", "2.txt", "3.txt")
remove_unique_lines(filenames)
Mogłem się gdzieś machnąć, ale mniej więcej podobnie do tego mogłoby to wyglądać :)
Da się to zrobić optymalniej:
-Nie przeszukiwać tekstu z którego bierzesz te linię.
Albo jeszcze lepiej:
-Zastosować counter jak kolega wyżej ale zapamiętując pliki które trzeba później przelecieć, a później tylko wyszukiwać ile razy w counterze znajduje się linia, wtedy ją zapisać lub nie zależnie od ilości wystąpień...