Ho un file CSV users.csvcon 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.txtho un elenco di ID utente:
30923833
77392318
Esiste un modo intelligente ed efficiente per rimuovere tutte le righe dal users.csvfile 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 sedo la awkmagia 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.csvrighe 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.txte users.csv, e l'utilizzo della memoria O (n) per toremove.txt(che è probabilmente relativamente piccolo)