Mam plik CSV users.csv
z 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.txt
mam listę identyfikatorów użytkowników:
30923833
77392318
Czy istnieje sprytny i skuteczny sposób na usunięcie wszystkich wierszy z users.csv
pliku 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ę sed
lub awk
magia 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.csv
pliku 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.txt
i users.csv
O (n) użycie pamięci dla toremove.txt
(co jest prawdopodobnie stosunkowo niewielkie)