Diferència entre revisions de la pàgina «ASIX-M3-UF3-A2»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb « Per poder treballar amb un fitxer primer de tot cal obrir-lo Atenció: el fitxer ha de ser a la mateixa carpeta que la funció (que el notebook o que l'arxiu .py)...».)
 
(Escriure en un fitxer)
 
(Hi ha 12 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
  
 +
==Obrir i tancar==
  
Per poder treballar amb un fitxer primer de tot cal obrir-lo
+
Per poder treballar amb un fitxer primer de tot cal obrir-lo.
 +
<source lang="python">
 +
fitxer = open("nom_fitxer.txt", "mode")
 +
</source>
 +
Modes:
  
Atenció: el fitxer ha de ser a la mateixa carpeta que la funció (que el notebook o que l'arxiu .py)
+
:* Per defecte el mode és '''r'''.
 +
:* '''r:''' Obrir fitxer per lectura. El punter es posiciona al començament del fitxer.
 +
:* '''r+:''' Obrir fitxer per lectura i escriptura. Es sobreescriu a partir de la posició on es trobi el punter.
 +
:* '''w:''' Si el fitxer existeix, trunca la longitud a zero i sinó el crea. El punter es posiciona al començament del fitxer.
 +
:* '''a:''' Obrir fitxer per escriptura. El punter es posiciona al final del fitxer.
  
elMeuFitxer = open("nom fitxer", "mode")
 
 
a on nom fitxer és el nom del fitxer en el disc i mode pot ser r (read) per llegir, w (write) per escriure [si no hi ha cap fitxer això el crea] o altres que no tractarem.
 
 
Per exemple:
 
 
elMeuFitxer = open("prova.txt", r)
 
 
obre el fitxer prova.txt en mode lectura (només podrem llegir, no escriure)
 
 
Hem de pensar sempre a tancar els fitxers un cop oberts perquè altrament es podrien produir resultats inesperats a l´hora de fer altres entrades o sortides o podriem tenir problemes de memòria.
 
 
elMeuFitxer.close()
 
 
Escriure en un fitxer
 
 
Un cop tinguem el fitxer obert ja podem fer coses amb ell. Per ex:
 
 
fitxer = open("fitxerprova.txt", "w")
 
 
fitxer.write("Hola món\n")  # el caràcter \n indica salt de línia
 
fitxer.write("Aquest és el nostre fitxer de text nou\n")
 
fitxer.write("i això és una línia nova\n")
 
fitxer.write("I el fitxer s'ha creat.\n")
 
  
 +
Hem de pensar sempre a tancar els fitxers un cop oberts perquè altrament es podrien produir resultats inesperats a l´hora de fer altres entrades o sortides o podríem tenir problemes de memòria.
 +
<source lang="python">
 
fitxer.close()
 
fitxer.close()
 +
</source>
  
I efectivament si mirem el fitxer amb un editor de text, a dintre hi veurem:
+
==Llegir d'un fitxer==
  
Hola món
+
un cop obert el fitxer per lectura, disposem de dues funcions: fitxer.read() i fitxer.readline()
Aquest és el nostre fitxer de text nou
 
i això és una línia nova
 
I el fitxer s´ha creat.
 
  
Llegir d'un fitxer
+
:* Lectura de tot el fitxer de cop: textFitxer = fitxer.read()
 +
:* Lectura de 100 bytes: textFitxer = fitxer.read(100)
 +
:* Lectura d'una línia complerta: textFitxer = fitxer.readline()
  
Quan llegim un fitxer python ens retorna un string amb el seu contingut
+
==Escriure en un fitxer==
  
file = open("fitxerprova.txt", "r")
+
Un cop obert el fitxer per escriptura disposem de la funció write()
print(file.read())
 
file.close()
 
  
Que ens mostrarà:
+
Exemples:
 +
<source lang=python>
 +
fitxer.open("nom_fitxer.txt","w")
  
Hola món
+
fitxer.write("Hola a tothom\n")  # el caràcter \n indica salt de línia
    Aquest és el nostre fitxer de text nou
+
fitxer.write("Segona línia del meu primer fitxer de text \n")
    i això és una línia nova
+
fitxer.write("Línia nova\n")
    I el fitxer s'ha creat.
+
fitxer.write("Darrera línia.\n")
  
o també podem optar a llegir-lo línia a línia
+
fitxer.close()
 +
</source>
  
file = open("fitxerprova.txt", "r")
+
Si obrim el fitxer amb un editor de text, veurem:
print(file.readlines())
+
<pre>
file.close()
+
Hola a tothom
 +
Segona línia del meu primer fitxer de text
 +
Línia nova
 +
Darrera línia.
 +
</pre>
  
Que ens mostrarà
+
o també podem veure el contingut del fitxer, fent:
 
+
<source lang="python">
['Hola món\n', 'Aquest és el nostre fitxer de text nou\n', 'i això és una línia nova\n', 'I el fitxer s'ha creat.\n']
+
fitxer = open("nom_fitxer.txt", "r")  
 
+
print(fitxer.read()) # fitxer.read() retorna un string amb tot el contingut del fitxer
Podem també recorrer un fitxer dins una iteració:
 
 
 
file = open("fitxerprova.txt", "r")  
 
for l in file:
 
    print(l)
 
 
file.close()
 
file.close()
 +
</source>
  
Que ens mostrarà
+
Podem també recórrer un fitxer dins una iteració:
 +
<source lang="python">
 +
fitxer = open("nom_fitxer.txt", "r")
 +
for linia in fitxer:
 +
    print(linia)
 +
fitxer.close()
 +
</source>
  
Hola món
+
Si volem diverses accions de lectura sobre un fitxer podem usar l´ordre with...
 +
<source lang="python">
 +
with open("nom_fitxer.txt") as fitxer: 
 +
    textFitxer = fitxer.read()
 +
    ...
 +
</source>
 +
amb el with obrim sempre en mode lectura, i no ens cal indicar el tancament
  
Aquest és el nostre fitxer de text nou
+
==Control del punter==
  
i això és una línia nova
+
:*fitxer.tell() ens diu la posició del punter.
 +
:*fitxer.seek (n,[p]) desplaçar el punter fins el byte n del fitxer des de la posició p.
 +
on p pot ser:
 +
:* res o 0: la posició és relativa al començament del fitxer.
 +
:* 1: la posició és relativa a la posició actual-
 +
:* 2: la posició es relativa al final del fitxer enredera.
  
I el fitxer s'ha creat..
+
==Bucles per fer una còpia d'un fitxer==
  
Gestió elegant de fitxers
+
for linia in fitxer
 +
<source lang="python">
 +
fitxer = open("origen.txt")
 +
fitxerCopia = open("desti.txt","w")
 +
for linia in fitxer:
 +
  fitxerCopia.write(linia)
 +
fitxerCopia.close()
 +
fitxer.close()
 +
</source>
  
Quan volem fer diverses accions de lectura sobre un fitxer podem usar l´ordre with...
+
Amb readline()
 +
<source lang="python">
 +
fitxer = open("origen.txt")
 +
fitxerCopia = open("desti.txt","w")
 +
linia = fitxer.readline()
 +
while linia != "":
 +
  fitxerCopia.write(linia)
 +
  linia = fitxer.readline()
 +
fitxerCopia.close()
 +
fitxer.close()
 +
</source>
  
with open("fitxerprova.txt") as file: 
+
==Enllaços==
    data = file.read()
 
    do something with data
 
 
 
amb el with obrim sempre en mode lectura, i no ens cal indicar el tancament
 
  
És molt recomanable doncs usar aquesta sintaxi quan s´escau.
+
[http://conocepython.blogspot.com/p/ape.html fitxers de text]

Revisió de 15:15, 11 maig 2021

Obrir i tancar

Per poder treballar amb un fitxer primer de tot cal obrir-lo.

fitxer = open("nom_fitxer.txt", "mode")

Modes:

  • Per defecte el mode és r.
  • r: Obrir fitxer per lectura. El punter es posiciona al començament del fitxer.
  • r+: Obrir fitxer per lectura i escriptura. Es sobreescriu a partir de la posició on es trobi el punter.
  • w: Si el fitxer existeix, trunca la longitud a zero i sinó el crea. El punter es posiciona al començament del fitxer.
  • a: Obrir fitxer per escriptura. El punter es posiciona al final del fitxer.


Hem de pensar sempre a tancar els fitxers un cop oberts perquè altrament es podrien produir resultats inesperats a l´hora de fer altres entrades o sortides o podríem tenir problemes de memòria.

fitxer.close()

Llegir d'un fitxer

un cop obert el fitxer per lectura, disposem de dues funcions: fitxer.read() i fitxer.readline()

  • Lectura de tot el fitxer de cop: textFitxer = fitxer.read()
  • Lectura de 100 bytes: textFitxer = fitxer.read(100)
  • Lectura d'una línia complerta: textFitxer = fitxer.readline()

Escriure en un fitxer

Un cop obert el fitxer per escriptura disposem de la funció write()

Exemples:

fitxer.open("nom_fitxer.txt","w")

fitxer.write("Hola a tothom\n")  # el caràcter \n indica salt de línia
fitxer.write("Segona línia del meu primer fitxer de text \n") 
fitxer.write("Línia nova\n") 
fitxer.write("Darrera línia.\n")

fitxer.close()

Si obrim el fitxer amb un editor de text, veurem:

Hola a tothom
Segona línia del meu primer fitxer de text
Línia nova
Darrera línia.

o també podem veure el contingut del fitxer, fent:

fitxer = open("nom_fitxer.txt", "r") 
print(fitxer.read()) # fitxer.read() retorna un string amb tot el contingut del fitxer
file.close()

Podem també recórrer un fitxer dins una iteració:

fitxer = open("nom_fitxer.txt", "r") 
for linia in fitxer:
    print(linia)
fitxer.close()

Si volem diverses accions de lectura sobre un fitxer podem usar l´ordre with...

with open("nom_fitxer.txt") as fitxer:  
    textFitxer = fitxer.read() 
    ...

amb el with obrim sempre en mode lectura, i no ens cal indicar el tancament

Control del punter

  • fitxer.tell() ens diu la posició del punter.
  • fitxer.seek (n,[p]) desplaçar el punter fins el byte n del fitxer des de la posició p.

on p pot ser:

  • res o 0: la posició és relativa al començament del fitxer.
  • 1: la posició és relativa a la posició actual-
  • 2: la posició es relativa al final del fitxer enredera.

Bucles per fer una còpia d'un fitxer

for linia in fitxer

fitxer = open("origen.txt")
fitxerCopia = open("desti.txt","w")
for linia in fitxer:
   fitxerCopia.write(linia)
fitxerCopia.close()
fitxer.close()

Amb readline()

fitxer = open("origen.txt")
fitxerCopia = open("desti.txt","w")
linia = fitxer.readline()
while linia != "":
   fitxerCopia.write(linia)
   linia = fitxer.readline()
fitxerCopia.close()
fitxer.close()

Enllaços

fitxers de text