Nas aulas anteriores Nesta aula. . . Trabalhar com ficheiros

Propaganda
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Nas aulas anteriores
Nesta aula. . .
1
Ficheiros
2
Leitura
3
Escrita
Tipos nativos do Python:
Tipos simples: inteiros, floats, booleanos.
Tipos compostos: strings, listas, dicionários.
João Pedro PEDROSO
João Pedro PEDROSO
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Trabalhar com ficheiros
Recordemos. . .
Utilização de dados (até agora):
1
2
codificados diretamente no programa;
introduzidos pelo utilizador.
Em qualquer aplicação real: residem em ficheiros ;
Para localizarmos um ficheiro podemos dar:
localização relativa ao ponto onde o programa está a ser executado
Ex: ficheiro hello.txt
Ex: ficheiro ../hello.txt
Exemplos: imagens, textos, música, . . .
localização absoluta (relativamente à raiz do sistema de ficheiros)
Aula de hoje: conceitos necessários a utilizar dados de ficheiros em
programas.
Ex: ficheiro /home/jpp/IP/hello.txt
Ênfase: ficheiros de texto (dados aí guardados são carateres).
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Caminho (path)
Regra
Para abrir um ficheiro tem de se fornecer ao Python a localização do
ficheiro no disco;
Regra a recordar:
se o ficheiro e o programa Python estão no mesmo diretório, podemos
usar apenas o nome do ficheiro:
Isso é feito através do caminho (path) para o ficheiro;
Exemplos (ficheiro hello.txt):
open(’myfile.txt’,’r’)
se o ficheiro e o programa Python estão em diretórios diferentes, tem de
se indicar o caminho (absoluto ou relativo) até ao ficheiro:
Mac: /Users/yourname/hello.txt
Windows: C:\Users\yourname\My Documents\hello.txt
Linux: /home/yourname/hello.txt
open(’/Users/jpp/myfile.txt’, ’r’)
open(’../IP/myfile.txt’, ’r’)
(Ver primeira aula.)
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Ficheiros em Python
Leitura
Suponhamos que temos um ficheiro com o nome qbdata.txt;
Processo de utilização de ficheiros:
1
2
3
Formato do ficheiro:
abrir ficheiro;
ler ou escrever dados;
fechar ficheiro.
Depois de um ficheiro estar a aberto: torna-se num objeto Python
Method
open
Use
open(filename,’r’)
Description
Open a file called filename and use it for reading.
Returns a reference to a file object.
open
open(filename,’w’)
Open a file called filename and use it for writing.
Returns a reference to a file object.
close
filevariable.close()
File use is complete.
João Pedro PEDROSO
Introdução à Programação - minor
First Name, Last Name, Position, Team, Completions, Attempts, Yards, TDs Ints
Colt McCoy QB, CLE 135 222 1576
6
9
60.8%
74.5
Josh Freeman QB, TB 291 474 3451
25 6
61.4%
95.9
[...]
Para abrir este ficheiro:
fileref = open("qbdata.txt","r")
Variável fileref contém agora a referência para um objeto do tipo
file, devolvido por open
Quando já não se precisa do ficheiro: fecha-se com
fileref.close()
Depois de se fechar o ficheiro, se se tentar utilizá-lo isso resulta num
erro.
João Pedro PEDROSO
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Iterar através das linhas do ficheiro
Outras formas de ler
Método readline de file
lê uma linha de cada vez,
devolve-a como str;
cada string contém um \n no
fim;
devolve string vazia quando
chega o fim do ficheiro.
Objetivo: ler linhas do ficheiro, imprimi-las com texto adicional;
Cada linha é uma sequência de carateres, terminada com o carater
especial de mudança de linha (newline, \n);
qbfile = open("qbdata.txt","r")
Método readlines de file
for aline in qbfile:
values = aline.split()
print(’QB ’, values[0], values[1], ’had a rating of ’, values[-1] )
devolve o conteúdo de todo o
ficheiro numa lista de strings;
cada elemento da lista é uma
string, que corresponde a uma
linha do ficheiro
qbfile.close()
Método read de file
Resultado:
QB
QB
QB
QB
devolve o conteúdo de todo o
ficheiro numa só string.
Colt McCoy had a rating of 74.5
Josh Freeman had a rating of 95.9
Michael Vick had a rating of 100.2
Matt Schaub had a rating of 92.0
João Pedro PEDROSO
Cada file tem um marcador
para a posição até onde foi lido:
readline: primeiro carater da
linha seguinte;
readlines, read: fim do
ficheiro.
Introdução à Programação - minor
João Pedro PEDROSO
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Métodos de ficheiros
Leitura: outra forma
Method Name
write
Use
filevar.write(astring)
Explanation
Add astring to the end of the file. filevar must
refer to a file that has been opened for writing.
read(n)
filevar.read()
Reads and returns a string of n characters, or the
entire file as a single string if n is not provided.
readline(n)
filevar.readline()
Returns the next line of the file with all text up
to and including the newline character. If n is
provided as a parameter than only n characters
will be returned if the line is longer than n.
readlines(n)
>>> infile = open("qbdata.txt","r")
>>> aline = infile.readline()
>>> aline
’Colt McCoy QB, CLE\t135\t222\t1576\t6\t9\t60.8%\t74.5\
>>> infile = open("qbdata.txt","r")
>>> linelist = infile.readlines()
>>> print(len(linelist))
34
>>> print(linelist[0:4])
[’Colt McCoy QB, CLE\t135\t222\t1576\t6\t9\t60.8%\t74.5
’Josh Freeman QB, TB\t291\t474\t3451\t25\t6\t61.4%\t95
’Michael Vick QB, PHI\t233\t372\t3018\t21\t6\t62.6%\t1
’Matt Schaub QB, HOU\t365\t574\t4370\t24\t12\t63.6%\t9
>>> infile = open("qbdata.txt","r")
>>> filestring = infile.read()
>>> print(len(filestring))
1708
>>> print(filestring[:256])
Colt McCoy QB, CLE 135
222
1576
6
9
Josh Freeman QB, TB 291
474
3451
25
6
Michael Vick QB, PHI
233
372
3018
21
Matt Schaub QB, HOU 365
574
4370
24
12
Philip Rivers QB, SD
357
541
4710
30
Matt Ha
>>>
filevar.readlines()
João Pedro PEDROSO
Utilizando um ciclo while:
infile = open("qbdata.txt","r")
line = infile.readline()
while line:
values = line.split()
print(’QB ’, values[0], values[1], ’had a rating of ’, values[-1] )
line = infile.readline()
infile.close()
Este padrão é mais parecido como a forma de ler de outras linguagens
de programação;
Returns a list of n strings, each representing a
single line of the file. If n is not provided then all
lines of the file are returned.
Primeiro readline: pré-leitura, priming read.
Introdução à Programação - minor
João Pedro PEDROSO
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Modos de abertura de ficheiros
Escrita de ficheiros
>>> f = open("test.dat","w")
>>> print(f)
<_io.TextIOWrapper name=’test.dat’ mode=’w’ encoding=’UTF-8’>
modos:
"r" leitura
"w" escrita
"a" escrita adicionada no final do ficheiro
1
se não existir um ficheiro com o nome “test.dat”, ele será criado
2
para se escrever no ficheiro: write()
>>> f.write("Now is the time")
15
>>> f.write("to close the file")
17
3
quando não se precisa mais do ficheiro, deve-se fechá-lo:
>>> f.close()
João Pedro PEDROSO
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
João Pedro PEDROSO
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Leitura de ficheiros (revisão)
Exemplo: remoção de linhas que começam por #
>>> f = open("test.dat","r")
1
se não existir um ficheiro com o nome “test.dat”, haverá um erro:
>>> f = open("test.cat","r")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: ’test.cat’
2
para se ler o ficheiro: read() lê o ficheiro inteiro:
>>> text = f.read()
>>> print(text)
Now is the timeto close the file
3
Com um argumento, lê apenas alguns caracteres:
>>> print(f.read(5))
Now i
4
def filterFile(oldFile, newFile):
f1 = open(oldFile, "r")
f2 = open(newFile, "w")
while True:
text = f1.readline()
if text == "":
break
if text[0] == ’#’:
continue
f2.write(text)
f1.close()
f2.close()
return
quando não se precisa mais do ficheiro, deve-se fechá-lo:
>>> f.close()
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Introdução à Programação - minor
Nas aulas anteriores
Ficheiros
Leitura
Escrita
Exemplo: cópia de ficheiros de texto
def copyFile(oldFile, newFile):
f1 = open(oldFile, "r")
f2 = open(newFile, "w")
while True:
text = f1.read(50)
if text == "":
break
f2.write(text)
f1.close()
f2.close()
return
João Pedro PEDROSO
Introdução à Programação - minor
Download