Ich habe eine CSV-Datei users.csv
mit 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.txt
ich eine Liste von Benutzer-IDs:
30923833
77392318
Gibt es eine clevere und effiziente Möglichkeit, alle Zeilen aus der users.csv
Datei 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 sed
oder awk
Magie 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.csv
Zeilen 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.txt
und 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.txt
und users.csv
, und O (n) Speichernutzung für toremove.txt
(was wahrscheinlich ist relativ klein)