SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Claudio Esperança
Python:
Entrada e Saída
Arquivos
 Entrada e saída são operações de comunicação de um
programa 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 de
um objeto da classe file
Arquivos default
 Já usamos, sem saber, três arquivos default
 Sempre que um comando print é executado, o resultado vai
para um arquivo chamado sys.stdout
 Sempre que lemos um dado através do comando input ou
raw_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("alo")‫‏‬
alo
>>> print "alo"
alo
>>> sys.stdin.readline()‫‏‬
sfadfas
'sfadfasn'
>>> raw_input()‫‏‬
fasdfadsf
'fasdfadsf'
Redirecionamento
 Os arquivos sys.stdin, sys.stdout e sys.stderr normalmente
estão associados ao teclado e ao display do terminal sendo
usado, 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 de
programa1 é 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 mesmo
que file, e portanto o comando é um construtor
 O objeto retornado é usado subseqüentemente para
realizar operações de entrada e saída:
>>> arq = open ("teste", "w")‫‏‬
>>> arq.write ("Oi")‫‏‬
>>> arq.close ()‫‏‬
>>> arq = open ("teste")‫‏‬
>>> x = arq.read()‫‏‬
>>> 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 rretornados
 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
 close()‫‏‬
 Termina o uso do arquivo para operações de leitura e
escrita
Convenção de fim de linha
 Arquivos de texto são divididos em linhas usando
caracteres 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ão
binário) faz traduções de n para se adequar ao sistema
operacional
 Em modo binário, entretanto, a conversão não é feita
Interação com o Sistema
Operacional
 Operações de entrada e saída são na verdade realizadas
pelo sistema operacional
 O módulo os possui diversas variáveis e funções que
ajudam um programa Python a se adequar ao sistema
operacional, 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 separa
componentes de um caminho ('/' para Unix, '' para
Windows)‫‏‬
 os.path.exists(path) diz se path se refere ao nome de um
arquivo existente
Lendo e escrevendo linhas
 readline(n)‫‏‬
 Se n não é especificado, retorna exatamente uma linha lida
do arquivo
 Caso contrário, lê uma linha, mas busca no máximo n
caracteres pelo final de linha
 readlines(n)‫‏‬
 Se n não é especificado, retorna o restante do conteúdo do
arquivo em uma lista de strings
 Caso n seja especificado, a leitura é limitada a n caracteres
no máximo
Lendo e escrevendo linhas
 writelines(seqüência)‫‏‬
 Escreve a lista (ou qualquer seqüência) de strings, uma por
uma no arquivo
 Caracteres terminadores de linha não são acrescentados
Acesso direto
 É possível ler e escrever não seqüencialmente em alguns
tipos de arquivo
 Devem estar associados a dispositivos que permitem
acesso direto, como discos, por exemplo
 seek(offset,whence)‫‏‬
 offset indica o número do byte a ser lido e escrito pela
pró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ício
do arquivo)‫‏‬
Lendo um arquivo inteiro
def copiaArquivo(velhoArquivo, novoArquivo):
f1 = open(velhoArquivo, "r")
f2 = open(novoArquivo, "w")
while True:
texto = f1.read(50) # lê 50 caracteres por vez
if texto == "": # chegou no fim do arquivo
break
f2.write(texto)
f1.close()
f2.close()
return
Pickling
 Para colocar valores em um arquivo, você tem que
convertê- 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étodo
dump 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 e
escrita
 I/OError, mas podem acontecer outros
 Devem ser capturadas com try...except
 Nos casos em que acontece um erro em uma operacão
com arquivo após sua abertura, ele deve ser fechado
para liberar seu recurso
 O uso de finally se torna fundamental
 Bloco de comandos em finally é executado, ocorrendo ou
não a exceção
Exceções com arquivos
try:
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 um
processamento de linhas: quaisquer linhas que comecem
com # serão omitidas.
 Faça um programa que leia um arquivo texto contendo
uma lista de endereços IP e gere um outro arquivo,
contendo um relatório dos endereços IP válidos e
inválidos. O formato de um endereco IP é
NUM1.NUM.NUM.NUM, onde NUM1 vai de 1 a 255 e
NUM vai de 0 a 255

Mais conteúdo relacionado

Mais procurados

Shell Scripting
Shell ScriptingShell Scripting
Shell Scriptingdcarneir
 
Shell script ii direcionadores
Shell script ii  direcionadoresShell script ii  direcionadores
Shell script ii direcionadoresCarlos Melo
 
Cap1 exercicios comandos linux resolucao part i
Cap1 exercicios comandos linux   resolucao part iCap1 exercicios comandos linux   resolucao part i
Cap1 exercicios comandos linux resolucao part iportal_Do_estudante
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Soa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellSoa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellportal_Do_estudante
 
Ficha javacc
Ficha javaccFicha javacc
Ficha javaccÆx Lynx
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlex Camargo
 
Programando em python modulos
Programando em python   modulosProgramando em python   modulos
Programando em python modulossamuelthiago
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell scriptbrunobione
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Curso De Shell Aula 3
Curso De Shell   Aula 3Curso De Shell   Aula 3
Curso De Shell Aula 3Felipe Santos
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 

Mais procurados (20)

Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Shell script ii direcionadores
Shell script ii  direcionadoresShell script ii  direcionadores
Shell script ii direcionadores
 
Terminal off python
Terminal off pythonTerminal off python
Terminal off python
 
Cap1 exercicios comandos linux resolucao part i
Cap1 exercicios comandos linux   resolucao part iCap1 exercicios comandos linux   resolucao part i
Cap1 exercicios comandos linux resolucao part i
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Soa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellSoa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shell
 
JavaCC
JavaCCJavaCC
JavaCC
 
Ficha javacc
Ficha javaccFicha javacc
Ficha javacc
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de strings
 
Shell Script v0
Shell Script v0Shell Script v0
Shell Script v0
 
Programando em python modulos
Programando em python   modulosProgramando em python   modulos
Programando em python modulos
 
Funcao PHP
Funcao PHPFuncao PHP
Funcao PHP
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
ptt
pttptt
ptt
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Fpar aula5
Fpar aula5Fpar aula5
Fpar aula5
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Curso De Shell Aula 3
Curso De Shell   Aula 3Curso De Shell   Aula 3
Curso De Shell Aula 3
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 

Destaque

006 programando em python - dicionarios
006   programando em python - dicionarios006   programando em python - dicionarios
006 programando em python - dicionariosLeandro Barbosa
 
004 programando em python - listas
004   programando em python - listas004   programando em python - listas
004 programando em python - listasLeandro Barbosa
 
005 programando em python - tuplas e strings
005   programando em python - tuplas e strings005   programando em python - tuplas e strings
005 programando em python - tuplas e stringsLeandro Barbosa
 
Ideias para programar
Ideias para programarIdeias para programar
Ideias para programarrobinhoct
 

Destaque (8)

05 listas
05 listas05 listas
05 listas
 
006 programando em python - dicionarios
006   programando em python - dicionarios006   programando em python - dicionarios
006 programando em python - dicionarios
 
03 algoritmos basicos
03 algoritmos basicos03 algoritmos basicos
03 algoritmos basicos
 
02 while
02 while02 while
02 while
 
004 programando em python - listas
004   programando em python - listas004   programando em python - listas
004 programando em python - listas
 
005 programando em python - tuplas e strings
005   programando em python - tuplas e strings005   programando em python - tuplas e strings
005 programando em python - tuplas e strings
 
Ideias para programar
Ideias para programarIdeias para programar
Ideias para programar
 
Aula02
Aula02Aula02
Aula02
 

Semelhante a 013 programando em python - arquivos

13 programando em python - arquivos
 13   programando em python - arquivos 13   programando em python - arquivos
13 programando em python - arquivosVictor Marcelino
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Comandos básicos Linux.docx
Comandos básicos Linux.docxComandos básicos Linux.docx
Comandos básicos Linux.docxWallace690884
 
Arquivos slides aula25
Arquivos slides aula25Arquivos slides aula25
Arquivos slides aula25AlanoG
 
Arquivos, Fluxos e Serialização de Objetos em Java
Arquivos, Fluxos e Serialização de Objetos em JavaArquivos, Fluxos e Serialização de Objetos em Java
Arquivos, Fluxos e Serialização de Objetos em JavaWilson Júnior
 
Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoAlex Camargo
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linuxLuciano Souto
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 

Semelhante a 013 programando em python - arquivos (20)

13 programando em python - arquivos
 13   programando em python - arquivos 13   programando em python - arquivos
13 programando em python - arquivos
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Algoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - ArquivosAlgoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - Arquivos
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
String e IO
String e IOString e IO
String e IO
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Java 15
Java 15Java 15
Java 15
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Comandos básicos Linux.docx
Comandos básicos Linux.docxComandos básicos Linux.docx
Comandos básicos Linux.docx
 
Arquivos em C
Arquivos em CArquivos em C
Arquivos em C
 
Java9
Java9Java9
Java9
 
Arquivos slides aula25
Arquivos slides aula25Arquivos slides aula25
Arquivos slides aula25
 
Arquivos, Fluxos e Serialização de Objetos em Java
Arquivos, Fluxos e Serialização de Objetos em JavaArquivos, Fluxos e Serialização de Objetos em Java
Arquivos, Fluxos e Serialização de Objetos em Java
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em disco
 
Tr.01.comandos part1
Tr.01.comandos part1Tr.01.comandos part1
Tr.01.comandos part1
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linux
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 

Mais de Leandro Barbosa

Mais de Leandro Barbosa (8)

01 variaveis io if
01 variaveis io if01 variaveis io if
01 variaveis io if
 
011 programando em python - conjuntos
011   programando em python - conjuntos011   programando em python - conjuntos
011 programando em python - conjuntos
 
05 biomassa
05 biomassa05 biomassa
05 biomassa
 
python
pythonpython
python
 
python.comandos
python.comandospython.comandos
python.comandos
 
python.tipos
python.tipospython.tipos
python.tipos
 
Estrutura cristalina
Estrutura cristalinaEstrutura cristalina
Estrutura cristalina
 
Lista de integração
Lista de integraçãoLista de integração
Lista de integração
 

013 programando em python - arquivos

  • 2. Arquivos  Entrada e saída são operações de comunicação de um programa 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 de um objeto da classe file
  • 3. Arquivos default  Já usamos, sem saber, três arquivos default  Sempre que um comando print é executado, o resultado vai para um arquivo chamado sys.stdout  Sempre que lemos um dado através do comando input ou raw_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
  • 4. Exemplo >>> import sys >>> sys.stdout.write("alo")‫‏‬ alo >>> print "alo" alo >>> sys.stdin.readline()‫‏‬ sfadfas 'sfadfasn' >>> raw_input()‫‏‬ fasdfadsf 'fasdfadsf'
  • 5. Redirecionamento  Os arquivos sys.stdin, sys.stdout e sys.stderr normalmente estão associados ao teclado e ao display do terminal sendo usado, 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 de programa1 é redirecionanda para a entrada de programa2
  • 6. Redirecionamento  Em Linux com shell bash  programa 2> arquivo  Executa programa redirecionando stderr para arquivo
  • 7. 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
  • 8. 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
  • 9. O objeto file  O comando open retorna um objeto do tipo file (arquivo)‫‏‬  Na verdade, em Python 2.4 em diante, open é o mesmo que file, e portanto o comando é um construtor  O objeto retornado é usado subseqüentemente para realizar operações de entrada e saída: >>> arq = open ("teste", "w")‫‏‬ >>> arq.write ("Oi")‫‏‬ >>> arq.close ()‫‏‬ >>> arq = open ("teste")‫‏‬ >>> x = arq.read()‫‏‬ >>> x 'Oi'
  • 10. 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 rretornados  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  close()‫‏‬  Termina o uso do arquivo para operações de leitura e escrita
  • 11. Convenção de fim de linha  Arquivos de texto são divididos em linhas usando caracteres 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ão binário) faz traduções de n para se adequar ao sistema operacional  Em modo binário, entretanto, a conversão não é feita
  • 12. Interação com o Sistema Operacional  Operações de entrada e saída são na verdade realizadas pelo sistema operacional  O módulo os possui diversas variáveis e funções que ajudam um programa Python a se adequar ao sistema operacional, 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 separa componentes de um caminho ('/' para Unix, '' para Windows)‫‏‬  os.path.exists(path) diz se path se refere ao nome de um arquivo existente
  • 13. Lendo e escrevendo linhas  readline(n)‫‏‬  Se n não é especificado, retorna exatamente uma linha lida do arquivo  Caso contrário, lê uma linha, mas busca no máximo n caracteres pelo final de linha  readlines(n)‫‏‬  Se n não é especificado, retorna o restante do conteúdo do arquivo em uma lista de strings  Caso n seja especificado, a leitura é limitada a n caracteres no máximo
  • 14. Lendo e escrevendo linhas  writelines(seqüência)‫‏‬  Escreve a lista (ou qualquer seqüência) de strings, uma por uma no arquivo  Caracteres terminadores de linha não são acrescentados
  • 15. Acesso direto  É possível ler e escrever não seqüencialmente em alguns tipos de arquivo  Devem estar associados a dispositivos que permitem acesso direto, como discos, por exemplo  seek(offset,whence)‫‏‬  offset indica o número do byte a ser lido e escrito pela pró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
  • 16. Acesso direto  tell()‫‏‬  Indica a posição corrente (número de bytes a partir do início do arquivo)‫‏‬
  • 17. Lendo um arquivo inteiro def copiaArquivo(velhoArquivo, novoArquivo): f1 = open(velhoArquivo, "r") f2 = open(novoArquivo, "w") while True: texto = f1.read(50) # lê 50 caracteres por vez if texto == "": # chegou no fim do arquivo break f2.write(texto) f1.close() f2.close() return
  • 18. Pickling  Para colocar valores em um arquivo, você tem que convertê- 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
  • 19. Pickling  >>> import pickle  >>> f = open('test.pck', 'w')  Para armazenar uma estrutura de dados, use o método dump e então feche o arquivo do modo usual:  >>> pickle.dump(12.3, f)  >>> pickle.dump([1,2,3], f)  >>> f.close()
  • 20. 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?>
  • 21. Exceções com arquivos  Erros que podem acontecem em operações de leitura e escrita  I/OError, mas podem acontecer outros  Devem ser capturadas com try...except  Nos casos em que acontece um erro em uma operacão com arquivo após sua abertura, ele deve ser fechado para liberar seu recurso  O uso de finally se torna fundamental  Bloco de comandos em finally é executado, ocorrendo ou não a exceção
  • 22. Exceções com arquivos try: 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()
  • 23. Exercícios  Escreva uma funcão que copia dois arquivos, mas faz um processamento de linhas: quaisquer linhas que comecem com # serão omitidas.  Faça um programa que leia um arquivo texto contendo uma lista de endereços IP e gere um outro arquivo, contendo um relatório dos endereços IP válidos e inválidos. O formato de um endereco IP é NUM1.NUM.NUM.NUM, onde NUM1 vai de 1 a 255 e NUM vai de 0 a 255