Mam plik CSV users.csvz listą nazw użytkowników, identyfikatorów użytkowników i innych danych:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"Paul McCartny", 30923833, "left", "black"
"Ringo Starr", 77392318, "right", "blue"
"George Harrison", 72349482, "left", "green"
W innym pliku toremove.txtmam listę identyfikatorów użytkowników:
30923833
77392318
Czy istnieje sprytny i skuteczny sposób na usunięcie wszystkich wierszy z users.csvpliku zawierającego identyfikatory toremove.txt? Napisałem prostą aplikację w języku Python, aby przeanalizować dwa pliki i zapisać w nowym pliku tylko te wiersze, których nie ma toremove.txt, ale jest to wyjątkowo powolne. Być może trochę sedlub awkmagia może tu pomóc?
Jest to pożądany wynik, biorąc pod uwagę powyższe przykłady:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csvpliku i n dla linii toremove.txt. Nie jestem pewien, jak to zrobić z mniejszą złożonością. Istotą jest to: for u in users: if not any(toremove in u): outputfile.write(u). Mogę wysłać to do recenzji kodu.
toremove.txt, zapisując wpisy jako klucze . Iterate users.csv, drukowanie tych, których identyfikatora nie ma w dykcie. Otrzymujesz przetwarzanie O (n) zarówno dla, jak toremove.txti users.csvO (n) użycie pamięci dla toremove.txt(co jest prawdopodobnie stosunkowo niewielkie)