30/05/2022
Prof. André Backes
1
30/05/2022
Arquivos
Por que usar arquivos?
Permitem armazenar grande quantidade de informação;
Persistência dos dados (disco);
Acesso aos dados poder ser não sequencial;
Acesso concorrente aos dados (mais de um programa
pode usar os dados ao mesmo tempo).
Tipos de Arquivos
Basicamente, a linguagem Python trabalha com dois
tipos de arquivos
arquivo texto
arquivo binário
2
30/05/2022
Tipos de Arquivos
Arquivo texto
armazena caracteres que podem ser mostrados
diretamente na tela ou modificados por um editor de
textos simples como o Bloco de Notas.
Os dados são gravados como caracteres de 8 bits.
Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 64
bits no arquivo (8 bits por dígito).
Tipos de Arquivos
Arquivo binário
armazena uma sequência de bits que está sujeita as
convenções dos programas que o gerou.
Ex: arquivos executáveis, arquivos compactados, arquivos de
registros, etc.
os dados são gravados na forma binária (do mesmo
modo que estão na memória).
Ex.: um número inteiro de 32 bits com 8 dígitos ocupará 32
bits no arquivo.
3
30/05/2022
Tipos de Arquivos
Ex: Os dois trechos de arquivo abaixo possuem os
mesmo dados :
nome = “Ricardo”;
i = 30;
a = 1.74;
Manipulando arquivos
A linguagem Python possui uma série de funções para
manipulação de arquivos
Suas funções se limitam a abrir/fechar e ler
caracteres/bytes/linhas do arquivo
É tarefa do programador criar a função que lerá um
arquivo de uma maneira específica
Para manipularmos um arquivo, vamos precisar apenas
de um objeto do tipo file
4
30/05/2022
Abrindo um arquivo
Para a abertura de um arquivo, usa-se a função open()
objeto-file = open(nome-arquivo,modo-abertura)
O parâmetro nome-arquivo determina qual arquivo
deverá ser aberto, sendo que o mesmo deve ser válido
no sistema operacional que estiver sendo utilizado
Abrindo um arquivo
No parâmetro nome-arquivo pode-se trabalhar com
caminhos absolutos ou relativos
Caminho absoluto: descrição de um caminho desde o
diretório raiz
C:\\Projetos\\dados.txt
Caminho relativo: descrição de um caminho desde o
diretório corrente
arq.txt
..\\dados.txt
5
30/05/2022
Abrindo um arquivo
O modo de abertura determina que tipo de uso será
feito do arquivo
A tabela a seguir mostra os modo válidos de abertura
de um arquivo
Modos de abertura
Modo Arquivo Função
"r" Texto Leitura. Arquivo deve existir.
"w" Texto Escrita. Cria arquivo se não houver. Apaga o anterior se ele existir.
"a" Texto Escrita. Os dados serão adicionados no fim do arquivo ("append").
"rb" Binário Leitura. Arquivo deve existir.
"wb" Binário Escrita. Cria arquivo se não houver. Apaga o anterior se ele existir.
"ab" Binário Escrita. Os dados serão adicionados no fim do arquivo ("append").
"r+" Texto Leitura/Escrita. O arquivo deve existir e pode ser modificado.
"w+" Texto Leitura/Escrita. Cria arquivo se não houver. Apaga o anterior se ele existir.
"a+" Texto Leitura/Escrita. Os dados serão adicionados no fim do arquivo ("append").
"rb+" Binário Leitura/Escrita. O arquivo deve existir e pode ser modificado.
"wb+" Binário Leitura/Escrita. Cria arquivo se não houver. Apaga o anterior se ele existir.
"ab+" Binário Leitura/Escrita. Os dados serão adicionados no fim do arquivo ("append").
6
30/05/2022
Abrindo um arquivo
Um arquivo texto pode ser aberto para escrita
utilizando o seguinte conjunto de comandos
Neste caso, o arquivo texte.txt será aberto. Agora já
podemos escrever dados ou fechá-lo
Fechando um arquivo
Como visto no slide anterior, sempre que terminamos
de usar um arquivo que foi aberto, devemos fechá-lo.
Para isso usa-se a função close()
objeto-file.close()
Mas por que precisamos fechar o arquivo?
7
30/05/2022
Fechando um arquivo
Por que precisamos fechar o arquivo?
Ao fechar um arquivo, todo dado que tenha
permanecido no "buffer" é gravado
O "buffer“ é uma região de memória que armazena
temporariamente os caracteres a serem gravados em
disco imediatamente
Apenas quando o "buffer" está cheio é que seu conteúdo
é escrito no disco
Fechando um arquivo
Mas por que utilizar um “buffer”?? Eficiência!
Para ler e escrever arquivos no disco temos que
posicionar a cabeça de gravação em um ponto específico
do disco
Se tivéssemos que fazer isso para cada caractere
lido/escrito, a leitura/escrita de um arquivo seria uma
operação muita lenta
Assim a gravação só é realizada quando há um volume
razoável de informações a serem gravadas ou quando o
arquivo for fechado
8
30/05/2022
Fechando um arquivo
Escrita/Leitura em Arquivos
Uma vez aberto um arquivo, podemos ler ou escrever
nele
Para tanto, a linguagem Python conta com uma série
de funções de escrita/leitura que variam de
funcionalidade para atender as diversas aplicações
Todas as funções que serão vistas trabalham com a
escrita/leitura de strings.
Cabe ao programador tratar os dados que escritos/lidos
do artigo
9
30/05/2022
Posição do arquivo
Ao se trabalhar com arquivos, existe uma espécie de
posição onde estamos dentro do arquivo. É nessa
posição onde será lido ou escrito o próximo caractere
ou cadeia de caracteres
Quando utilizando o acesso sequencial, raramente é
necessário modificar essa posição
Após cada leitura, a posição no arquivo é
automaticamente atualizada para a próxima posição a
ser lida
Após cada escrita, a posição no arquivo é
automaticamente atualizada para a próxima posição a
ser escrita
Escrita em Arquivos
Para escrever em um arquivo usa-se a função write().
Forma geral:
objeto-file.write(string)
Esta função recebe como parâmetro uma cadeia de
caracteres (string) que será escrita no arquivo aberto
especificado por objeto-file
10
30/05/2022
Escrita em Arquivos
A função write()
Exemplo
permite gravar strings
contendo qualquer tipo
de dado, inclusive dados
formatados e sequências
de escape
Cabe então ao Saída
programador colocar os
dados a serem gravados
dentro da string
Leitura em Arquivos
Enquanto para escrever em um arquivos utilizamos
apenas a função write(), para ler temos várias opções
objeto-file.read()
objeto-file.read(n)
objeto-file.readline()
objeto-file.readlines()
11
30/05/2022
Leitura em Arquivos
A função read() lê todo o
Exemplo
conteúdo de um arquivo aberto
e armazena em uma string
Os dados serão lidos
exatamente como estão salvos
no arquivo, inclusive com as Saída
quebras de linhas.
Leitura em Arquivos
A função read(N) lê apenas os
Exemplo
N próximos caracteres de um
arquivo aberto e armazena em
uma string
Como na função read(), os
dados serão lidos exatamente Saída
como estão salvos no arquivo,
inclusive com as quebras de
linhas.
12
30/05/2022
Leitura em Arquivos
A função readline() lê apenas
Exemplo
uma linha de texto de um
arquivo aberto e armazena em
uma string
Essa função lê da posição atual
no arquivo até encontrar um Saída
quebra de linha
O caractere de quebra de linha
(\n) será armazenado dentro
da string
Leitura em Arquivos
A função readlines() lê todo o
Exemplo
conteúdo de um arquivo aberto
e armazena em uma lista de
strings
O caractere de quebra de linha
(\n) separa uma string da outra
e será armazenado dentro da
string
Saída
13
30/05/2022
Lendo um arquivo até o final
Diferente de outras linguagens, Python não possui um
teste de fim de arquivo (EOF, end of file)
Em Python, a indicação de final de arquivo se dá pela
ausência de bytes retornada por uma função de leitura
Assim, a melhor maneira de se verificar se chegamos
ao final do arquivo é testar se algo foi retornado pela
função de leitura
Lendo um arquivo até o final
Exemplo
O teste de final de arquivo pode
ser facilmente implementado
com uma construção do tipo
while True / break
Saída
Basicamente, criamos um laço
infinito (while True) e sempre
que a leitura retorna nada
interrompemos o laço (break)
14
30/05/2022
Tratamento de erros e exceções
Nenhum sistema é perfeito. Todo sistema está sujeito a
ações que causam anomalias
Divisão por zero, raíz quadrada de um número negativo,
abrir um arquivo que não existe
Em algum momento qualquer sistema terá que tratar
uma exceção, e é melhor ele estar preparado para isso
Ou o usuário terá seu sistema encerrado de forma
inesperada
Ou receberá uma mensagem incompreensível
15
30/05/2022
Instruções try-except
Uma forma de apanhar os erros e exceções que podem
ocorrer no nosso programa Python é usar o comando
try-except
Forma geral
Tratar qualquer exceção Tratar uma determinada exceção
Instruções try-except
Um bloco try delimita um segmento do programa
onde alguma coisa errada pode acontecer
Já o bloco except contém o código que será executado
se a exceção ocorrer
16
30/05/2022
Instruções try-except
Um bloco try pode possuir mais de um bloco except
Nesse caso, cada bloco except pode tratar um tipo de
exceção específica
Instruções try-except
Algumas exceções já pré-definidas
IOError
Erros de leitura/escrita de arquivos
ValueError
Parâmetros fora do domínio (exemplo, sqrt(-1))
IndexError
Índice fora de limites
TypeError
Erro de tipos
17
30/05/2022
Instruções try-finally
A instrução try-finally é similar a try-except
A instrução finally sempre é executada
O código que estiver no bloco finally sempre será
executado, independentemente se ocorre ou não uma
exceção
Forma geral
Instruções try-finally
A instrução finally é muito útil quando queremos
liberar algum recurso utilizado, como fechar arquivo
Assim, mesmo que dê erro na leitura do arquivo, o
mesmo será fechado.
18
30/05/2022
Instruções try-finally
Pode-se ainda usar as instruções try, except e finally
em conjunto
Material Complementar
Vídeo Aulas
Aula 34 - Arquivos: definição
https://youtu.be/1ZFe-OqMB28
Aula 35 - Arquivos: abrindo e fechando
https://youtu.be/vtc5P6V_8t8
Aula 36 - Arquivos: leitura e escrita
https://youtu.be/VscBZSm4K10
Aula 37 - Tratamento de erros e exceções
https://youtu.be/FxCEHvk3SjI
19