Tenho uma lista de assuntos de e-mail que foram enviados hoje (eu conecto ao meu servidor IMAP e busco todos os e-mails):
sent_subjects = [
'subject1 backup up completed', 'subject2-2 backup failed', 'subject4 backup partial complete', 'email3 done', 'ak47 failed', 'mp5 is good', 'm4 is good'
]
Tenho um json
arquivo e quase todos os scripts que tenho e envio por e-mail, eles têm entrada lá:
emails = [
{'subject': 'mp3 is good', 'date': '2020-02-02'},
{'subject': 'mp5 is good', 'date': '2020-02-02'},
{'subject': 'm4 is good', 'date': '2020-02-02'}
]
E eu crio subjects
assim:
subjects = [x['subject'] for x in emails]
Estes são todos os assuntos que devem ser enviados (alguns deles não foram enviados):
static_subjects = [
'subject1', 'subject2-2', 'subject4', 'email3', 'ak47', 'subject10', 'email11', 'final destination'
]
subjects += static_subjects
subjects.sort()
Eu sei que posso fazer isso, mas isso não retorna a saída esperada:
final = list(set(subjects) - set(sent_subjects))
Porque alguns assuntos subject1
não subject4
têm assunto estático e podem mudar com base em algumas condições (esses assuntos não são meus e eu não envio e-mails com esses assuntos. Eu apenas os recebo).
Então, preciso verificar se algum assunto subjects
não está em sent_subjects
, para que eu possa rastrear quais e-mails não recebi, para ver se há algum problema.
Neste caso, não recebi esses assuntos e a saída deveria tê-los:
mp3 is good
subject10
email11
final destination
A outra coisa que sei é que usar if ==
não funciona, porque email11
por exemplo é como subject1
e subject2-2
que tem dois ou mais assuntos (se falha ou sucesso).
Você poderia me ajudar com isso?
Você pode tentar isto:
A única diferença entre meu código e o seu é que eu excluo
set([s.split(' ')[0] for s in sent_subjects])
adicionalmente no final.