Arquivos
Leitura e Escrita de Arquivos
Entendendo o que são arquivos
Antes de aprendermos sobre os arquivos, precisamos entender como o computador armazena dados — entendimento a nível da máquina.
Bit
A menor unidade de armazenamento de um computador é o bit. Um bit armazena os valores 0 ou 1. Todos os outros dados são conjuntos de bits.
Vejamos um exemplo contendo a representação binária (em bits) dos números inteiros de 1 a 10:
Byte
Subindo um nível na abstração dos bits, encontramos o Byte. Um Byte é o conjunto de 8 bits. 8 bits podem assumir os valores entre:
- 0 (zero) em 8 bits (binário) é 00000000;
- 255 em 8 bits (binário) é 11111111.
Já ouvimos falar em Byte quando compramos um pendrive, memória de computador, HD etc. Normalmente, vemos os seguintes múltiplos do Byte:
Um byte também é utilizado para representarmos os caracteres que utilizamos conforme a tabela ASCII. Para sabermos o valor ASCII de um caractere no Python, utilizamos o comando ord(<caractere>).
Todos os arquivos de um computador são conjuntos de bytes. A forma como visualizamos cada tipo de arquivo (imagem, música, arquivo de texto etc) é apenas uma representação diferente para estes conjuntos de dados.
Por exemplo, vamos ver como a imagem do Yoda é representada quando a abrimos com um editor de texto:
Perceba que qualquer arquivo do computador pode ser representado como uma sequência de caracteres, pois cada Byte que compõem o arquivo pode ser representado como um caractere. Essa informação nos será muito útil quando manipularmos arquivos de tipos diferentes.
Abrindo arquivos — comando open()
O comando open() (abrir) é o comando que utilizaremos para abrir arquivos. Sua sintaxe é a seguinte:
arquivo = fopen(<nome_do_arquivo>, <modo>)
O nome do arquivo deve ser uma string contendo o caminho relativo ou absoluto do arquivo.
Caminhos como /home/usuario/arquivo.txt
e C:/Users/usuario/arquivo.txt
são exemplos de caminhos absolutos, respectivamente, no Linux e Windows.
Caminhos arquivo.txt
é o caminho relativo para o arquivo de texto que esteja localizado junto com o código python que irá lê-lo.
O modo é uma string que especifica o tipo manipulação do arquivo, leitura ou escrita e a maneira como o arquivo será representado, texto ou binário. Os modos existentes são:
Nota: Não especificando o tipo de manipulação, o modo r
(leitura) é assumido.
Nota²: Não especificando o modo de leitura, o modo t
(texto) é assumido.
Nota³: A combinação r+ inicia com o cursor no início do arquivo e a combinação w+ inicia com o cursor no final do arquivo; o modo a adiciona no início e a combinação a+adiciona no final.
O retorno do comando open() é um objeto do tipo arquivo (TextIOWrapper) e é a partir da variável que contém esse objeto que iremos chamar os métodos de leitura.
Todo arquivo aberto deve ser fechado utilizando o método close(). A sintaxe desse comando é:
arquivo = fopen(<nome_do_arquivo>, <modo>)
arquivo.close()
Vejamos um alguns exemplos para a leitura e escrita do seguinte arquivo:
- Lendo o arquivo exemplo.txt, em modo texto, localizado no diretório /home/wpessoa;
- Lendo o arquivo exemplo.txt, em modo texto, localizado no mesmo diretório (pasta) do arquivo Python que fará a leitura:
- Escrevendo um novo conteúdo no arquivo exemplo.txt localizado no mesmo diretório (pasta) do arquivo Python que fará a escrita:
- Adicionando um novo conteúdo (sem apagar o antigo) no arquivo exemplo.txt localizado no mesmo diretório (pasta) do arquivo Python que fará a adição:
- Mesma coisa do exemplo anterior, mas usando o modo r+:
E se esquecermos de fechar o arquivo?
O Python possui algumas maneiras automáticas de fechar o arquivo caso você esqueça. Entretanto, temos uma maneira segura de abrir arquivos e sempre garantir seu fechamento.
Comando ‘with’
O comando with (com) pega um objeto retornado de algum comando ou método e destrói esse objeto no final do seu escopo. Sua sintaxe é a seguinte:
# "----" simboliza os espaços (tab)
with <comando_que_retorna_um_objeto> as <variável>:
----<código>
A variável armazenará esse objeto temporariamente durante o escopo (código tabulado) do comando with.
Vejamos um exemplo realizando a leitura do último arquivo que trabalhamos:
Uma maneira simples de modificarmos arquivos
Em um dos exemplos que vimos, precisamos mover o cursor para realizar alterações no arquivo e poder lê-lo ao mesmo tempo.
Fica mais fácil realizar modificações se carregarmos todo o conteúdo do arquivo na memória, modificarmos esse conteúdo e então escrevê-lo de volta no arquivo.
Vejamos um exemplo onde troco o conteúdo de cada linha para sua forma capitalizada.
Tem mais coisas envolvendo arquivos?
Sim! Em um dos exemplos, eu usei o comando import os
, o qual me trouxe comandos novos para serem utilizados. Existem diversos comandos úteis para utilizarmos com arquivos na parte “extra” do Python.
Existem outros tipos de arquivos como é o caso do JSON. É um arquivo de texto com uma organização de conteúdo especial que é bastante utilizado.
Iremos abordar essa parte extra em outro momento. Por agora, só precisamos saber como ler e escrever em arquivos de forma simples.
Exercícios
Faça os exercícios recomendados para esta seção: