Lectura i escriptura de fitxers¶
Fins ara hem parlat sempre de la sortida estàndard (el terminal) i l’entrada estàndard (el teclat), però els nostres programes poden utilitzar altres sortides, com la sortida en mode gràfic, els altaveus o la impressora, i altres entrades com el micròfon o el ratolí. A continuació parlarem d’una cosa que pot servir tant d’entrada com de sortida: els fitxers.
Per a utilitzar un fitxer cal representar-lo amb un nom de variable i utilitzar la funció open()
, que ens retornarà el fitxer que desitgem obrir. Aquesta funció rep dos cadenes de text com a paràmetres: en primer lloc la ruta al fitxer, que pot ser absoluta o relativa, i en segon lloc una indicació del mode d’accés al fitxer.
Els modes d’accés al fitxer poden ser, entre altres:
r: Obri el fitxer en mode lectura. Aquest és el mode per defecte.
w: Obri el fitxer en mode escriptura. Si hi ha un contingut anterior aquest serà eliminat.
a: Obri el fitxer en un mode d’escriptura però sense modificar el contingut anterior. Allò que escrivim s’afegirà al final.
Els modes poden servir també per especificar el tipus d’informació que llegirem o escriurem al fitxer:
t: Mode text. La informació obtinguda del fitxer serà transformada en caràcters, i es retornarà una cadena de text. Aquest és el mode per defecte.
b: Mode binari. La informació obtinguda es retorna en forma d’objecte de tipus bytes sense cap transformació. Aquest és el mètode adequat per a llegir o escriure en fitxers que no contenen text com, per exemple, imatges, fitxers de so o vídeo.
Per tant podem utilitzar modes com “rt”, per a llegir d’un fitxer de text o “wt” per a escriure en ell. Observa que com que el mode “r” i el mode “t” son els valors per defecte (aquells que s’utilitzen si no s’indica altra cosa). Per exemple, quan indiquem el mode “w” aquest és equivalent a “wt”, i si no indiquem cap mode en absolut s’utilitzarà el mode “rt”.
Observa el següent exemple:
fitxer = open('nom_fitxer','r')
Quan acabem d’utilitzar el fitxer cal tornar a tancar-lo amb el mètode close.
fitxer.close()
Llegir d’un fitxer¶
Per llegir d’un fitxer disposem dels mètodes read()
, readline()
i readlines()
.
- Per als següents exemples imaginarem que hem obert amb la funció
open()
un fitxer amb el següent contingut:: abc def ghi
El mètode read()
retorna una cadena que conté el contingut del fitxer.
>>> contingut = f.read()
>>> print(contingut)
'abc\ndef\nghi\n'
El mètode read()
accepta un nombre sencer com a paràmetre, que indicara la quantitat de bytes que llegirà.
>>> contingut = f.read(2)
>>> print(contingut)
'ab'
>>> contingut = f.read(2)
>>> print(contingut)
'c\n'
>>> contingut = f.read(2)
>>> print(contingut)
'de'
El mètode readline()
retorna les línies del fitxer una per una, és a dir, cada vegada que s’utilitza retorna una cadena de text amb una línia del fitxer.
>>> contingut = f.readline()
>>> print(contingut)
'abc\n'
>>> contingut = f.readline()
>>> print(contingut)
'def\n'
Finalment el mètode readlines()
retorna una llista, cadascun dels elements que la qual és una línia del fitxer.
>>> contingut = f.readlines()
>>> print(contingut)
['abc\n','def\n','ghi\n']
Escriure en un fitxer¶
Recorda que per escriure en un fitxer cal obrir-lo en mode “w” o “a”, en funció de si desitgem reemplaçar el contingut del fitxer o afegir més contingut a continuació de l’última línia.
Per escriure podem utilitzar els mètodes write()
i writelines()
. El primer pren com a paràmetre una cadena de text, mentre que el segon pren com a paràmetre una llista de cadenes de text, que s’escriuran consecutivament al fitxer.
1f = open('nom_fitxer','a')
2f.write('Text que escriurem al fitxer')
3f.writelines(['Primera línia\n', 'Segona línia\n', 'Tercera línia\n'])
Observa que quan s’utilitza el mètode writelines()
no s’afegeix automàticament un bot de línia després de cada cadena de text: s’espera que cada cadena el porte inclòs. En cas contrari no apareixeran al fitxer com a diferents línies, sinó escrites de manera consecutiva.