Tengo un archivo CSV users.csvcon una lista de nombres de usuario, ID de usuario y otros datos:
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"
En otro archivo toremove.txttengo una lista de ID de usuario:
30923833
77392318
¿Existe una manera inteligente y eficiente de eliminar todas las filas del users.csvarchivo que contienen los ID toremove.txt? He escrito una aplicación simple de Python para analizar los dos archivos y escribir en un nuevo archivo solo aquellas líneas que no se encuentran toremove.txt, pero es extraordinariamente lenta. Tal vez algo sedo awkmagia puede ayudar aquí?
Este es el resultado deseado, considerando los ejemplos anteriores:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csvlíneas del archivo yn para las líneas de toremove.txt. No estoy realmente seguro de cómo hacerlo con menor complejidad. El quid de la cuestión es: for u in users: if not any(toremove in u): outputfile.write(u). Puedo publicarlo en Code Review.
toremove.txt, guardando las entradas como claves . Iterate users.csv, imprimiendo aquellos donde la identificación no está en el dict. Obtiene el procesamiento O (n) para ambos toremove.txty users.csv, y el uso de memoria O (n) para toremove.txt(que probablemente sea relativamente pequeño)