Tengo un archivo CSV users.csv
con 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.txt
tengo una lista de ID de usuario:
30923833
77392318
¿Existe una manera inteligente y eficiente de eliminar todas las filas del users.csv
archivo 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 sed
o awk
magia 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.csv
lí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.txt
y users.csv
, y el uso de memoria O (n) para toremove.txt
(que probablemente sea relativamente pequeño)