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