J'ai un fichier CSV users.csv
avec une liste de UserNames, userIDs et autres données:
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"
Dans un autre fichier, toremove.txt
j'ai une liste d'utilisateurs:
30923833
77392318
Existe-t-il un moyen intelligent et efficace de supprimer toutes les lignes du users.csv
fichier contenant les ID toremove.txt
? J'ai écrit une simple application Python pour analyser les deux fichiers et écrire dans un nouveau fichier uniquement les lignes qui ne se trouvent pas toremove.txt
, mais c'est extrêmement lent. Peut-être que certains sed
ou la awk
magie peuvent aider ici?
C'est le résultat souhaité, compte tenu des exemples ci-dessus:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csv
lignes du fichier, et n pour les lignes de toremove.txt
. Je ne sais pas vraiment comment le faire avec une complexité moindre. L'essentiel de c'est: for u in users: if not any(toremove in u): outputfile.write(u)
. Je peux le poster sur Code Review.
toremove.txt
en sauvegardant les entrées sous forme de clés . Itérer les utilisateurs.csv, en imprimant ceux dont l'id n'est pas dans le dict. Vous obtenez le traitement O (n) pour les deux toremove.txt
et users.csv
, et l'utilisation de la mémoire O (n) pour toremove.txt
(qui est probablement relativement petite)