3. Metadades

Un fitxer amb metadades està estructurat en tres parts consecutives: metadades, capçalera i dades. El fitxer consum_elect.txt n’és un exemple:

:Origen: https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv    
:    Descripció :     consum d’electricitat durant alguns mesos de   2022.
:Tema: Energia
Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor
2022-01-01,08001,Indústria,0-6,817
2022-01-01,08001,Indústria,6-12,942
2022-01-01,08001,Indústria,12-18,1145

En aquest exemple, les tres primeres línies contenen les metadades, la quarta, la capçalera i la resta, les dades.

En general, les línies que contenen metadades comencen amb el caràcter dos punts (:), seguit del nom de la metadada, uns altres dos punts i el valor de la metadada. La capçalera és la primera línia que no comença per dos punts. Les dades són la resta de línies que van després de la capçalera.

Com veiem a la segona línia de l’exemple anterior, poden haver-hi espais en blanc en qualsevol posició d’una línia amb metadades i el valor de la metadada pot contenir dos punts.

Dissenya la funció següent i desa-la al mòdul metadades (fitxer metadades.py).

metadades.extreu_metadades(nom_fitxer)

Extreu les metadades del fitxer amb metadades

Paràmetres:

nom_fitxer (str) – nom del fitxer amb metadades

Tipus de retorn:

dict

Retorna:

diccionari en què les claus són els noms de les metadades del fitxer nom_fitxer i els valors són els valors de les metadades.

Les claus i els valors del diccionari no han de tenir espais en blanc al començament ni al final.

Per exemple:


Contingut del fitxer.

>>> print(dades) 
:Origen: https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv    
:    Descripció :     consum d’electricitat durant alguns mesos de   2022.
:Tema: Energia
Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor
2022-01-01,08001,Indústria,0-6,817
2022-01-01,08001,Indústria,6-12,942
2022-01-01,08001,Indústria,12-18,1145

Extraiem les metadades.

>>> md = extreu_metadades('consum_elect.txt')
>>> md == {
... 'Origen': 'https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv',
... 'Descripció': 'consum d’electricitat durant alguns mesos de   2022.',
... 'Tema': 'Energia',
... }
True

Si el fitxer és buit, el diccionari de metadades també és buit.

>>> with open('buit.txt', 'w') as f: pass

>>> md = extreu_metadades('buit.txt')
>>> md
{}

Si el fitxer no té metadades, el diccionari de metadades és buit.

>>> dades = """\
... Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor
... 2022-01-01,08001,Indústria,0-6,817
... """
>>> with open('sense_metadades.txt', 'w') as f: r = f.write(dades)

>>> md = extreu_metadades('sense_metadades.txt')
>>> md
{}

Disposes de més tests al fitxer test-extreu_metadades.txt.