Ich habe eine CSV-Datei users.csvmit einer Liste von Benutzernamen, Benutzer-IDs und anderen Daten:
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"
In einer anderen Datei habe toremove.txtich eine Liste von Benutzer-IDs:
30923833
77392318
Gibt es eine clevere und effiziente Möglichkeit, alle Zeilen aus der users.csvDatei zu entfernen, in der sich die IDs befinden toremove.txt? Ich habe eine einfache Python-App geschrieben, um die beiden Dateien zu analysieren und in eine neue Datei nur die Zeilen zu schreiben, in denen sie nicht gefunden werden toremove.txt, aber sie ist außerordentlich langsam. Vielleicht kann etwas sedoder awkMagie hier helfen?
Dies ist das gewünschte Ergebnis, wenn man die obigen Beispiele betrachtet:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csvZeilen der Datei und n für die Zeilen von toremove.txt. Ich bin mir nicht sicher, wie ich es mit geringer Komplexität machen soll. Der Kern ist: for u in users: if not any(toremove in u): outputfile.write(u). Ich kann es bei Code Review posten.
toremove.txtund die Einträge als Schlüssel speichern . Iterieren Sie users.csv und geben Sie diejenigen aus, bei denen die ID nicht im Diktat enthalten ist. Sie erhalten O (n) Verarbeitung für beide toremove.txtund users.csv, und O (n) Speichernutzung für toremove.txt(was wahrscheinlich ist relativ klein)