2. Capçaleres dels correus¶
Els correus electrònics que només contenen text i segueixen el format
estàndard tenen dues parts
separades per una línia en blanc: la capçalera i el cos. El fitxer
correu-1.txt conté un exemple:
Received: from x.y.test
by example.net
via TCP
with ESMTP
id ABC12345
for <mary@example.net>; 21 Nov 1997 10:05:43 -0600
Received: from node.example by x.y.test; 21 Nov 1997 10:01:22 -0600
From: John Doe <jdoe@node.example>
To: Mary Smith <mary@example.net>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <1234@local.node.example>
This is a message just to say hello.
So, "Hello".
La capçalera està formada per tot un seguit de camps. Els camps són
línies que comencen per un nom de camp seguit pel signe dos punts, un
espai en blanc i el valor del camp. Vegeu la línia amb nom de camp
From i valor John Doe <jdoe@node.example> a l’exemple
anterior. Poden haver-hi valors de camps que ocupin més d’una línia
com en el primer Received de l’exemple. Identificarem aquestes
línies perquè no contenen el caràcter dos punts seguit d’un blanc
(': '). Considerem que aquestes línies formen part del valor del
darrer nom de camp que hàgim trobat.
Dissenya la funció següent i desa-la al mòdul correus_e
(fitxer correus_e.py).
- correus_e.filtra_capcalera(nfcorreu, camps, nffiltrat)¶
nfcorreu és el nom d’un fitxer que conté un correu electrònic.
camps és una llista de noms de camps.
nffiltrat és el nom del fitxer on s’ha d’escriure el correu filtrat.
Escriu al fitxer nffiltrat els camps de la capçalera del correu electrònic del fitxer nfcorreu que el seu nom estigui a camps.
Per exemple:
>>> nfc = 'correu-1.txt' >>> camps = ['Received', 'To'] >>> nff = 'filtrat-1.txt' >>> filtra_capcalera(nfc, camps, nff) >>> with open(nff, 'r') as f: print(f.read()) Received: from x.y.test by example.net via TCP with ESMTP id ABC12345 for <mary@example.net>; 21 Nov 1997 10:05:43 -0600 Received: from node.example by x.y.test; 21 Nov 1997 10:01:22 -0600 To: Mary Smith <mary@example.net>
Observa que cal tenir en compte tant els camps que el seu valor ocupa una línia com els que ocupa més d’una línia.
Recorda que només cal escriure alguns dels camps de la capçalera i que la capçalera se separa del cos per una línia en blanc, és a dir, una línia que només conté el caràcter
\n.Trobaràs més tests al fitxer
test-filtra_capcalera.txt.