Você está na página 1de 31

20109

INTRODUÇÃO À COMPUTAÇÃO B
OLIBÁRIO J M NETO
olibarioneto@gmail.com
Manipulação de arquivos
Escrita de dados
Leitura de dados
SUMÁRIO
MANIPULAÇÃO DE ARQUIVOS

• Objetivos
– Escrever dados da memória RAM para o disco
– Ler dados do disco para a memória RAM
– Processar dados em RAM e atualizá-los no disco
MANIPULAÇÃO DE ARQUIVOS

• Manipulação de arquivos
–Até o momento
• Não guardamos dados
• Tudo fica na memória RAM
• Ao encerrar o programa, perdemos os dados
lidos
–Solução
• Armazenar dados em disco
–Armazenamento permanente
MANIPULAÇÃO DE ARQUIVOS

• Processo usual
– Programa .py precisa estar salvo em um diretório
para executar
– Por padrão, arquivos são salvos no mesmo
diretório do programa, porém é possível
especificar qualquer diretório para salvar arquivos
– Arquivo deve ser aberto para leitura/ escrita pelo
comando open
arq = open(‘meuarquivo.txt’,’w’)
MANIPULAÇÃO DE ARQUIVOS

• Método open
arq = open(<nome_arquivo>,<modo>)
– Nome do arquivo
• Nome do arquivo, juntamente com seu local (caminho)
e extensão (.txt, .json, .xml, .html, etc.)
– Modos principais
• Escrita (‘w’, do inglês ‘write’)
• Leitura (‘r’, do inglês ‘read’)
Ex.:
arq = open(‘telefones.txt’,’w’)
arq = open(‘Documentos/Aulas/notas.txt’,’r’)
MANIPULAÇÃO DE ARQUIVOS

• Após aberto, temos uma referência ao arquivo na


variável (no nosso caso, a variável arq)
• Podemos, então, escrever ou ler dados
– A depender do modo em que abrimos o arquivo
– O modo escrita cria o arquivo, caso ele não exista
– O modo leitura depende que o arquivo já tenha sido criado
• Método de escrita: write(<texto>)
Ex.:
MANIPULAÇÃO DE ARQUIVOS

• Após o uso, o arquivo deve ser fechado


– Método para fechar: close()
– Responsabilidade do programador!
– Após fechamento, variável não é acessada mais
• Necessário abrir novamente o arquivo por meio de open
Ex.:
MANIPULAÇÃO DE ARQUIVOS

• Outra forma de escrita


– Uso de lista
• Função writelines(<lista>)
– Conteúdo adicionado linha a linha
– Formatação deve ser feita manualmente
MANIPULAÇÃO DE ARQUIVOS

• Exercício 1
– Escrever o texto abaixo em um arquivo-texto com
nome à sua escolha.

Programação é o processo de escrita,


teste e manutenção de um programa
de computador. O programa é escrito
em uma linguagem de programação,
embora seja possível, com alguma
dificuldade, escrevê-lo diretamente
em linguagem de máquina.
MANIPULAÇÃO DE ARQUIVOS

• Exercício 2
– Tente escrever o texto abaixo no mesmo arquivo
do exercício anterior.
• O que acontece?

Python é uma linguagem de


programação de alto nível, porque
está distante do código de máquina e
mais próxima da linguagem humana.
MANIPULAÇÃO DE ARQUIVOS

• Leitura de dados
– Processo de usar os dados do arquivo como
entrada para um algoritmo
– Acesso por meio da função open
• Modo leitura: ‘r’

arq = open(‘meuarquivo.txt’,’r’)
MANIPULAÇÃO DE ARQUIVOS

• Leitura de dados
– Função read() retorna o conteúdo de todo o
arquivo
– Arquivo é fechado após o uso

arq = open(‘meuarquivo.txt’,’r’)
texto = arq.read()
print(texto)
arq.close()
MANIPULAÇÃO DE ARQUIVOS

• Vimos que o método write no modo ‘w’ sobrescreve o


conteúdo anterior
• Como adicionar novo conteúdo ao final do arquivo?
– Possibilidade 1:
• Abrir no modo leitura
• Ler conteúdo e atribuir a uma variável
• Fechar e abrir no modo escrita
• Escrever novo conteúdo, usando o que foi lido
• Fechar
arq = open(‘meuarquivo.txt’,’r’)
textoAntigo = arq.read()
arq.close()
arq = open(‘meuarquivo.txt’,’w’)
arq.write(textoAntigo + ‘\nÚltima linha’)
arq.close() Aqui adicionamos o trecho “Última
linha” à última linha do arquivo.
MANIPULAÇÃO DE ARQUIVOS

• Vimos que o método write no modo ‘w’ sobrescreve o


conteúdo anterior
• Como adicionar novo conteúdo ao final do arquivo?
– Possibilidade 2:
• Abrir no modo append (concatenar ao final)
• Escrever usando o método write, normalmente

arq = open(‘meuarquivo.txt’,’a’)
arq.write(‘\nÚltima linha’)
arq.close()
Código faz o mesmo que o anterior.
E se quiséssemos adicionar o
conteúdo ao início do arquivo?
MANIPULAÇÃO DE ARQUIVOS

• Exercício 3
– Crie um menu para perguntar se o usuário deseja
sobrescrever o conteúdo do arquivo ou adicionar
um novo conteúdo ao arquivo. Implemente as
funcionalidades adequadamente.
Ex.:

Concatena Adicionar O que você Substituir Escreve /


texto conteúdo deseja fazer? conteúdo Sobrescreve

Sair
MANIPULAÇÃO DE ARQUIVOS

• Exercício 3
– Crie um menu para perguntar se o usuário deseja
sobrescrever o conteúdo do arquivo ou adicionar
um novo conteúdo ao arquivo. Implemente as
funcionalidades adequadamente.
• Como permitir a leitura de quebra de linhas?
Ex.:

Concatena Adicionar O que você Substituir Escreve /


texto conteúdo deseja fazer? conteúdo Sobrescreve

Sair
MANIPULAÇÃO DE ARQUIVOS

• Leitura de dados
– Função readlines() retorna o conteúdo do arquivo em
uma lista
• Cada linha é um elemento da lista
– Arquivo é fechado após o uso

arq = open(‘meuarquivo.txt’,’r’)
texto = arq.readlines()
for linha in texto:
print(linha)
arq.close()
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 1: armazenamos cada campo em uma
linha
Como saber que estou lendo um
Contatos.txt
nome? Como saber o telefone de
alguém?
Ana Carla
Devemos saber a estrutura do arquivo!
16 98212-1234
Aqui sabemos que cada registro ocupa
ana@bol.com.br
exatas três linhas do arquivo.
Bruno Costa
 Ler linha a linha, atualizando um
19 3364-2342
contador. Toda vez que o contador for
bruno@gmail.com
múltiplo de 3, temos um nome. Os
Cátia Maia
seguintes são o fone e o email deste
35 98200-2342
nome, respectivamente.
catiam@hotmail.com
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 1: armazenamos cada campo em uma
linha
Contatos.txt
Vantagem: simplicidade
Ana Carla Desvantagem: e se uma
16 98212-1234
ana@bol.com.br pessoa não tiver email?
Bruno Costa O que fazer?
19 3364-2342
bruno@gmail.com
Cátia Maia
35 98200-2342
cam@hotmail.com
MANIPULAÇÃO DE ARQUIVOS

• Estratégia para organizar dados


– Imaginemos uma agenda
– Estratégia 1: armazenamos cada campo em uma linha

Contatos.txt Podemos usar um email-


Ana Carla
padrão e único para
16 98212-1234 indicar que não há email.
ana@bol.com.br Por exemplo:
Bruno Costa sememail@email ou
19 3364-2342
bruno@gmail.com mesmo caracteres
Cátia Maia especiais como ***
35 98200-2342 Poderíamos usar
catiam@hotmail.com abordagem parecida para
outro campo.
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 2: cada campo em um arquivo

Nomes.txt Fones.txt Emails.txt

Ana Carla 16 98212-1234 ana@bol.com.br


Bruno Costa 19 3364-2342 bruno@gmail.com
Cátia Maia 35 98200-2342 cam@hotmail.com

Vantagem: agilizo a consulta por apenas um dos campos.


MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 2: cada campo em um arquivo
Nomes.txt Fones.txt Emails.txt

Ana Carla 16 98212-1234 ana@bol.com.br


Bruno Costa 19 3364-2342 bruno@gmail.com
Cátia Maia 35 98200-2342 cam@hotmail.com

E se eu quiser editar o telefone do Bruno Costa?


Devo caminhar no arquivo Nomes para descobrir a posição (linha) em que
“Bruno Costa” aparece (usando readlines e iterando em uma lista). Então, leio
os dados do arquivo de telefones da mesma forma e altero o elemento da lista
de fones na posição encontrada (linha). Escrevo a nova lista no arquivo de
telefones em seguida, no modo escrita.
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 2: cada campo em um arquivo
Nomes.txt Fones.txt Emails.txt

Ana Carla 16 98212-1234 ana@bol.com.br


Bruno Costa 19 3364-2342 bruno@gmail.com
Cátia Maia 35 98200-2342 cam@hotmail.com

E se eu quiser remover o registro do Bruno Costa?


1) Devo caminhar no arquivo Nomes para descobrir a posição (linha) em que
“Bruno Costa” aparece (usando readlines e iterando em uma lista). Então,
realizo um pop(linha) na lista e escrevo a lista resultante em Nomes. Faço o
mesmo para os dois outros arquivos, na posição encontrada!
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para organizar dados


– Imaginemos uma agenda
– Estratégia 2: cada campo em um arquivo
Nomes.txt Fones.txt Emails.txt

Ana Carla 16 98212-1234 ana@bol.com.br


*Bruno Costa *19 3364-2342 *bruno@gmail.com
Cátia Maia 35 98200-2342 cam@hotmail.com

E se eu quiser remover o registro do Bruno Costa?


2) Adiciono um marcador de que o registro foi removido do arquivo. No caso, o
marcador é o asterisco. Note que os dados não são de fato removidos do
arquivo, sendo necessário que o programa conheça a funcionalidade do
asterisco no arquivo.
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para armazenar dados


– Imaginemos uma agenda
– Estratégia 3: separamos os campos por um
caractere especial
• Exemplo: *
• Desvantagem: temos que garantir que o usuário não
vai inserir o caractere especial para nenhum campo

Contatos.txt

Ana Carla*16 98212-1234*ana@bol.com.br


Bruno Costa*19 3364-2342*bruno@gmail.com
Cátia Maia*35 98200-2342*cam@hotmail.com
MANIPULAÇÃO DE ARQUIVOS

• Estratégias para armazenar dados


– Imaginemos uma agenda
– Estratégia 3: separamos os campos por um caractere especial
• Exemplo: *
• Desvantagem: temos que garantir que o usuário não vai inserir o
caractere especial para nenhum campo

Contatos.txt

Ana Carla*16 98212-1234*ana@bol.com.br


Bruno Costa*19 3364-2342*bruno@gmail.com

Cátia Maia*35 98200-2342*cam@hotmail.com


Como separar os campos?
1) Percorrer letra por letra e adicionar a strings até que se chegue em cada
asterisco;
2) Usar a função split(<padrao>)
MANIPULAÇÃO DE ARQUIVOS

• Função split(<padrao>)
– Procura pelo padrão na string, separa as substrings, excluindo-
se o padrão e coloca cada substring em uma posição de uma
lista
MANIPULAÇÃO DE ARQUIVOS

• Exercício 4
Seguindo a estratégia 3, exiba os nomes, fones e emails,
um abaixo do outro.
Resposta:
MANIPULAÇÃO DE ARQUIVOS

• Notas
– Existem inúmeras maneiras de representar dados em
arquivos
– Buscar dados em disco pode ser milhares de vezes mais
lento que buscar dados em RAM. Portanto, devemos
evitar acessos constantes a discos
– Algumas estratégias de representação são
extremamente eficientes, mas não são foco desta
disciplina
– A abordagem de usar um caractere especial para indicar
que o registro foi removido pode ser usado em qualquer
das estratégias explicadas nesta aula.
• Em Computação, chamamos este caractere especial de flag
MANIPULAÇÃO DE ARQUIVOS

• Exercício para entregar


– Implemente um programa que, dado o arquivo contatos.txt
de acordo com a terceira estratégia de representação de
dados apresentada, lê um nome de um contato e salva em
um arquivo chamado saida.txt o nome, o telefone e o email
deste contato.
Ex.:
Ana Carla*16 98212-1234*ana@bol.com.br
Bruno Costa*19 3364-2342*bruno@gmail.com
Cátia Maia*35 98200-2342*cam@hotmail.com
Entrada do programa: Bruno Costa
Saida.txt: Assuma que o nome buscado está na lista.
Bruno Costa Você pode sobrescrever o conteúdo de
Fone: 19 3364-2342 saida.txt, ou concatenar (à sua escolha).
Email: bruno@gmail.com Use exatamente o nome saida.txt para o
arquivo gerado e envie apenas o programa
.py.

Você também pode gostar