Ho un file CSV users.csv
con un elenco di nomi utente, ID utente e altri dati:
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 un altro file toremove.txt
ho un elenco di ID utente:
30923833
77392318
Esiste un modo intelligente ed efficiente per rimuovere tutte le righe dal users.csv
file che contengono gli ID toremove.txt
? Ho scritto una semplice app Python per analizzare i due file e scrivere su un nuovo file solo quelle righe che non si trovano in toremove.txt
, ma è straordinariamente lento. Forse alcuni sed
o la awk
magia possono aiutare qui?
Questo è il risultato desiderato, considerando gli esempi sopra:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csv
righe del file e n per le righe di toremove.txt
. Non sono davvero sicuro di come farlo con una complessità inferiore. L'essenza di esso è: for u in users: if not any(toremove in u): outputfile.write(u)
. Posso pubblicarlo su Code Review.
toremove.txt
, salvando le voci come chiavi . Iterate users.csv, stampando quelli in cui l'id non è nel dict. Ottieni l'elaborazione O (n) per entrambi toremove.txt
e users.csv
, e l'utilizzo della memoria O (n) per toremove.txt
(che è probabilmente relativamente piccolo)