013   programando em python - arquivos
Upcoming SlideShare
Loading in...5
×
 

013 programando em python - arquivos

on

  • 410 views

 

Statistics

Views

Total Views
410
Views on SlideShare
410
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

013   programando em python - arquivos 013 programando em python - arquivos Presentation Transcript

  • Claudio EsperançaPython:Entrada e Saída
  • Arquivos Entrada e saída são operações de comunicação de umprograma com o mundo externo Essa comunicação se dá usualmente através de arquivos Arquivos estão associados a dispositivos Por exemplo, disco, impressora, teclado Em Python, um arquivo pode ser lido/escrito através deum objeto da classe file
  • Arquivos default Já usamos, sem saber, três arquivos default Sempre que um comando print é executado, o resultado vaipara um arquivo chamado sys.stdout Sempre que lemos um dado através do comando input ouraw_input, na verdade estamos lendo de um arquivochamado sys.stdin Mensagens de erro ou de rastreamento de exceções sãoenviadas para um arquivo chamado sys.stderr
  • Exemplo>>> import sys>>> sys.stdout.write("alo")‫‏‬alo>>> print "alo"alo>>> sys.stdin.readline()‫‏‬sfadfassfadfasn>>> raw_input()‫‏‬fasdfadsffasdfadsf
  • Redirecionamento Os arquivos sys.stdin, sys.stdout e sys.stderr normalmenteestão associados ao teclado e ao display do terminal sendousado, mas podem ser reassociados a outros dispositivos Em Unix/Linux e Windows: programa > arquivo Executa programa redirecionando stdout para arquivo programa < arquivo Executa programa redirecionando stdin de arquivo programa1 | programa2 Executa programa1 e programa2 sendo que a saída deprograma1 é redirecionanda para a entrada de programa2
  • Redirecionamento Em Linux com shell bash programa 2> arquivo Executa programa redirecionando stderr para arquivo
  • Abrindo arquivos open (name, mode, buffering)‫‏‬ name : nome do arquivo a abrir mode : (opcional) modo de abertura – string contendo r : leitura (default)‫‏‬ w : escrita b : binário a : escrita a partir do final + : (usado com r) indica leitura e escrita
  • Abrindo arquivos buffering : (opcional) indica se memória (buffers) éusada para acelerar operações de entrada e saída 0 : buffers não são usados 1 (ou qq número negativo): um 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)‫‏‬ Na verdade, em Python 2.4 em diante, open é o mesmoque file, e portanto o comando é um construtor O objeto retornado é usado subseqüentemente pararealizar operações de entrada e saída:>>> arq = open ("teste", "w")‫‏‬>>> arq.write ("Oi")‫‏‬>>> arq.close ()‫‏‬>>> arq = open ("teste")‫‏‬>>> x = arq.read()‫‏‬>>> xOi
  • 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 pontoatual até o fim do arquivo são rretornados write(string)‫‏‬ Escreve string no arquivo Devido ao uso de buffers, a escrita pode não ser feitaimediatamente Use o método flush() ou close() para assegurar a escrita física close()‫‏‬ Termina o uso do arquivo para operações de leitura eescrita
  • Convenção de fim de linha Arquivos de texto são divididos em linhas usandocaracteres especiais Linux/Unix: n Windows: rn Mac: r Python usa sempre n para separar linhas Ao se ler/escrever um arquivo aberto em modo texto (nãobinário) faz traduções de n para se adequar ao sistemaoperacional Em modo binário, entretanto, a conversão não é feita
  • Interação com o SistemaOperacional Operações de entrada e saída são na verdade realizadaspelo sistema operacional O módulo os possui diversas variáveis e funções queajudam um programa Python a se adequar ao sistemaoperacional, por exemplo: os.getcwd() retorna o diretório corrente os.chdir(dir) muda o diretório corrente para dir os.sep é uma string com o caractere que separacomponentes de um caminho (/ para Unix, paraWindows)‫‏‬ os.path.exists(path) diz se path se refere ao nome de umarquivo existente
  • Lendo e escrevendo linhas readline(n)‫‏‬ Se n não é especificado, retorna exatamente uma linha lidado arquivo Caso contrário, lê uma linha, mas busca no máximo ncaracteres pelo final de linha readlines(n)‫‏‬ Se n não é especificado, retorna o restante do conteúdo doarquivo em uma lista de strings Caso n seja especificado, a leitura é limitada a n caracteresno máximo
  • Lendo e escrevendo linhas writelines(seqüência)‫‏‬ Escreve a lista (ou qualquer seqüência) de strings, uma poruma no arquivo Caracteres terminadores de linha não são acrescentados
  • Acesso direto É possível ler e escrever não seqüencialmente em algunstipos de arquivo Devem estar associados a dispositivos que permitemacesso direto, como discos, por exemplo seek(offset,whence)‫‏‬ offset indica o número do byte a ser lido e escrito pelapróxima operação de entrada e saída whence indica a partir de onde offset será contado 0 (default) : do início 1 : do ponto corrente 2 : do final
  • Acesso direto tell()‫‏‬ Indica a posição corrente (número de bytes a partir do iníciodo arquivo)‫‏‬
  • Lendo um arquivo inteirodef copiaArquivo(velhoArquivo, novoArquivo):f1 = open(velhoArquivo, "r")f2 = open(novoArquivo, "w")while True:texto = f1.read(50) # lê 50 caracteres por vezif texto == "": # chegou no fim do arquivobreakf2.write(texto)f1.close()f2.close()return
  • Pickling Para colocar valores em um arquivo, você tem queconvertê- los para strings >>> arq.write (str(12.3)) >>> arq.write (str([1,2,3])) O problema é que quando você lê de volta o valor, vocêtem uma string. O Tipo original da informação foi perdido. >>> arq.readline() 12.3[1, 2, 3] Solução: Pickling
  • Pickling >>> import pickle >>> f = open(test.pck, w) Para armazenar uma estrutura de dados, use o métododump e então feche o arquivo do modo usual: >>> pickle.dump(12.3, f) >>> pickle.dump([1,2,3], f) >>> f.close()
  • Pickling Recuperando as estruturas: >>> f = open(test.pck, r) >>> x = pickle.load(f) >>> x 12,3 >>> type(x) <type ?float?> >>> y = pickle.load(f) >>> y [1, 2, 3] >>> type(y) <type ?list?>
  • Exceções com arquivos Erros que podem acontecem em operações de leitura eescrita I/OError, mas podem acontecer outros Devem ser capturadas com try...except Nos casos em que acontece um erro em uma operacãocom arquivo após sua abertura, ele deve ser fechadopara liberar seu recurso O uso de finally se torna fundamental Bloco de comandos em finally é executado, ocorrendo ounão a exceção
  • Exceções com arquivostry:f = open(teste.txt, r)line‫“‏=‏‬Tentando‫‏‬escrever‫‏‬em‫‏‬um‫‏‬arquivo‫‏‬somente‫‏‬de‫‏‬leitura”f.write(line)except:print‫“‏‬a‫‏‬escrita‫‏‬não‫‏‬foi‫‏‬possível‫‏‏‏‏“‏‬finally:f.close()
  • Exercícios Escreva uma funcão que copia dois arquivos, mas faz umprocessamento de linhas: quaisquer linhas que comecemcom # serão omitidas. Faça um programa que leia um arquivo texto contendouma lista de endereços IP e gere um outro arquivo,contendo um relatório dos endereços IP válidos einválidos. O formato de um endereco IP éNUM1.NUM.NUM.NUM, onde NUM1 vai de 1 a 255 eNUM vai de 0 a 255