Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquivos O QUE É, COMO LER E MANIPULAR Arquivos Variáveis oferecem armazenamento de dados temporariamente Os dados são perdidos quando o escopo da variável é finalizado ou quando o programa termina Arquivos são usados para retenção permanente de um grande conjunto de dados, mesmo depois que o programa que criou os dados termina Dados mantidos em arquivos são chamados de dados persistentes Computadores guardam arquivos em dispositivos de armazenamento secundário, tais como o HD, pen drive, DVD (alguém ainda usa?) Em Python, um arquivo pode ser lido/escrito por meio de um objeto da classe File Arquivos default Sem saber, já utilizamos três arquivos default: Sempre que um comando print é executado, na verdade o resultado é direcionado para um arquivo chamado sys.stdout Sempre que lemos um dado através do comando input, na verdade estamos lendo de um arquivo chamado sys.stdin Mensagens de erro ou de rastreamento de exceções são enviadas para um arquivo chamado sys.stderr Exemplo >>> import sys >>> sys.stdout.write(“Hello”) Hello >>> print “Hello” Hello >>> sys.stdin.readline() UFRJ ‘UFRJ\n’ Na tela aparece ‘UFRJ’ e uma quebra de linha >>> input() ‘UFRJ’ ‘UFRJ’ o input ignora as quebras de linhas >>> raw_input() UFRJ ‘UFRJ’ é um input já preparado para String. Quebras de linha também são ignoradas Abrindo arquivos Open (name, mode, buffering) name: nome do arquivo a abrir mode (opcional): modo de abertura r: Read. Leitura (Este é o modo default) w: Write. Escrita a: Append. Escrita a partir do final +: Utilizado junto com r. Indica leitura e escrita buffering (opcional): indica se a memória (buffer) é usada para acelerar as operações de entrada e saída 0: buffers não são usados 1 (ou qualquer número negativo): buffer de tamanho padrão (default) 2 ou maior: tamanho do buffer em bytes O objeto File O comando open retorna um objeto do tipo File (arquivo) O objeto retornado é usado subsequentemente para realizar operações de entrada e saída: >>> arq = open (‘arquivo_teste.txt’, ‘w’) >>> arq.write ("Oi") >>> arq.close () >>> arq = open (‘arquivo_teste.txt’) >>> x = arq.read() >>> print x Oi Métodos Read, Write e Close read(num) Lê num bytes do arquivo e os retorna numa string Se num não é especificado, todos os bytes desde o ponto atual até o fim do arquivo são retornados Ou seja, se utilizado somente read() logo após abrir o arquivo, irá ler o arquivo inteiro do início ao fim write(string) Escreve string no arquivo Devido ao uso de buffers, a escrita pode não ser feita imediatamente Use o método flush() ou close() para assegurar a escrita física Métodos Read, Write e Close close() Encerra o uso do arquivo para operações de leitura e escrita Se existir alguma escrita pendente no buffer, força a escrita imediata para após fechar o arquivo Convenção de quebra de linha Arquivos de texto são divididos em linhas usando caracteres especiais Linux/Unix: \n Windows: \r\n Mac: \r Python usa sempre \n para separar linhas Ao se ler ou escrever um arquivo aberto em modo texto, o interpretador Python traduz o ‘\n’ para se adequar ao sistema operacional em que está sendo utilizado Lendo e escrevendo linhas readline(n) Se n não é especificado, retorna exatamente uma linha lida do arquivo Caso contrário, lê no máximo n caracteres readlines() retorna uma lista de strings com o restante do conteúdo do arquivo. Atenção: Nenhum método de leitura retira quebra de linha Lendo e escrevendo linhas Ao ler um arquivo que tenha quebra de linha os caracteres especiais podem vir junto Tais caracteres podem ser removidos com strip(), lstrip() ou rstrip() write(string) Escreve uma string no arquivo writelines(sequência) Escreve a lista (ou qualquer sequência) de strings, uma por uma no arquivo. Caracteres terminadores de linha não são acrescentados Lendo um arquivo inteiro def copiaArquivo (velhoArquivo, novoArquivo): f1 = open(velhoArquivo, "r") f2 = open(novoArquivo, "w") while True: texto = f1.readline() # lê a linha inteira if texto == “”: # chegou no fim do arquivo break f2.write(texto) f1.close() f2.close() return Dicas Um for sobre um arquivo de leitura nos permite iterar sobre cada linha do arquivo por vez for linha in arq: print linha Podemos, de uma só vez, ler e numerar as linhas for i, linha in enumerate(arq): print i + 1, linha Exercícios 1) Escreva uma função que receba dois nomes de arquivos. O primeiro é o arquivo original que deve ser lido. O segundo deve ser gerado a partir do primeiro. Porém, o arquivo original contém algumas linhas que se iniciam com o caractere #. Essas linhas não devem estar presentes no arquivo que será gerado. Exercícios 2) Faça um programa que recebe o nome de um arquivo contendo uma lista de IP’s. O programa deve ler esse arquivo e gerar um outro arquivo chamado “relatório_ips.txt” indicando ao final de cada linha se o IP é válido ou inválido. O formato de um endereço IP válido é x.y.y.y, onde x vai de 1 a 255 e y vai de 0 a 255. Pickling Arquivos são basicamente cadeias de caracteres, portanto para colocar valores numéricos em um arquivo, é necessário convertê-los para strings: >>> arq = open(‘meu_arquivo.txt’, ‘w’) >>> arq.write(10) Erro! >>> arq.write(str(12.3)) Ok! >>> arq.write(str([4,5,6])) Ok! Pickling PROBLEMA! Quando você lê o valor a partir do arquivo, você tem uma string O tipo original da informação foi perdido >>> arq = open(‘meu_arquivo.txt’, ‘r’) >>> arq.readline() '12.3[1, 2, 3]‘ SOLUÇÃO: Pickling Pickling >>> import pickle >>> f = open(‘teste.pck’,’w’) Para armazenar uma estrutura de dados, use o método dump e então feche o arquivo do modo usual: >>> pickle.dump(40.2, f) >>> pickle.dump([7,8,9], f) >>> f.close() Um arquivo pickle não consegue ser lido por seres humanos Para recuperar o que escrevemos, utiliza-se o método load Pickling Recuperando as estruturas: >>> f = open('teste.pck', 'r') >>> x = pickle.load(f) >>> print x 40.2 O método load lê uma linha, análogo ao readline() >>> type(x) <type 'float'> Método type identifica o tipo do dado armazenado >>> y = pickle.load(f) Lendo a segunda linha >>> print y [7, 8, 9] >>> type(y) <type 'list‘> Exercícios 3) Você irá criar um programa que permite que o usuário insira um número. Sempre que ele inserir coloque esse número numa lista e gere um número aleatoriamente e coloque-o numa outra lista. Ao escolher encerrar o programa salve essas listas com o Pickle para poder continuar outro dia. As opções do usuário são: 1: Inserir um número de 1 a 50 2: Visualizar os números inseridos 3: Visualizar os números gerados 4: Visualizar a média total 5: Encerrar programa
Compartilhar