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.