J'ai un fichier CSV users.csvavec 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.txtj'ai une liste d'utilisateurs:
30923833
77392318
Existe-t-il un moyen intelligent et efficace de supprimer toutes les lignes du users.csvfichier 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 sedou la awkmagie 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.csvlignes 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.txten 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.txtet users.csv, et l'utilisation de la mémoire O (n) pour toremove.txt(qui est probablement relativement petite)