Arquivos

Willian Pessoa
Reflexão Computacional
5 min readMay 17, 2019

--

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:

Representação binária 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:

Múltiplos do byte com seus respectivos símbolos e suas quantidades em 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>).

Uso do comando ord() para obter o valor ASCII de caracteres.

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:

Imagem do Yoda aberta no Kate (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:

Tabela retirada da documentação da função Open() do Python.

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;
Código exemplo.
Execução do código exemplo.
  • Lendo o arquivo exemplo.txt, em modo texto, localizado no mesmo diretório (pasta) do arquivo Python que fará a leitura:
Código exemplo.
Execução do código exemplo.
  • Escrevendo um novo conteúdo no arquivo exemplo.txt localizado no mesmo diretório (pasta) do arquivo Python que fará a escrita:
Código exemplo.
Execução do código exemplo.
  • 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:
Código exemplo.
Execução do código exemplo.
  • Mesma coisa do exemplo anterior, mas usando o modo r+:
Código exemplo.
Execução do código exemplo.

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:

Código exemplo.
Execução do código exemplo.

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.

Código exemplo.
Execução do código exemplo.

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:

--

--