Eu tenho um arquivo CSV users.csv
com uma lista de userNames, userIDs e outros dados:
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"
Em outro arquivo toremove.txt
, tenho uma lista de userIDs:
30923833
77392318
Existe uma maneira inteligente e eficiente de remover todas as linhas do users.csv
arquivo que contém os IDs toremove.txt
? Eu escrevi um aplicativo Python simples para analisar os dois arquivos e gravar em um novo arquivo apenas as linhas que não foram encontradas toremove.txt
, mas é extraordinariamente lento. Talvez alguma sed
ou awk
mágica possa ajudar aqui?
Este é o resultado desejado, considerando os exemplos acima:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csv
linhas do arquivo en para as linhas de toremove.txt
. Não tenho muita certeza de como fazê-lo com menor complexidade. A essência do que é: for u in users: if not any(toremove in u): outputfile.write(u)
. Posso publicá-lo na Revisão de Código.
toremove.txt
, salvando as entradas como chaves . Iterate users.csv, imprimindo aqueles em que o ID não está no dict. Você começa O (n) o processamento para ambos toremove.txt
e users.csv
, e uso de O (n) de memória para toremove.txt
(o que provavelmente é relativamente pequeno)