Leitura e Escrita de Arquivos em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá o processo fundamental de leitura e escrita em arquivos no Python. E/S (Entrada/Saída) de arquivos é uma habilidade crucial para qualquer programador, pois permite que seus programas persistam dados, leiam configurações e interajam com o sistema de arquivos.

Focaremos no uso da instrução with, que é a maneira moderna e recomendada de lidar com arquivos no Python. Ela garante que os arquivos sejam fechados automaticamente, mesmo que ocorram erros, prevenindo vazamentos de recursos.

Ao longo deste laboratório, você irá:

  • Entender o processo básico de E/S de arquivos.
  • Abrir e ler arquivos usando diferentes métodos (read(), readlines() e iteração).
  • Escrever novo conteúdo em arquivos e anexar conteúdo a arquivos existentes.

Todas as operações serão realizadas dentro do LabEx WebIDE. Vamos começar.

O Processo de Leitura e Escrita de Arquivos

Nesta etapa, você aprenderá sobre o processo básico de I/O (Entrada/Saída) de arquivos em Python e por que a instrução with é essencial.

Para ler ou escrever em um arquivo em Python, você geralmente segue três etapas:

  1. Abrir o arquivo.
  2. Ler ou escrever no arquivo.
  3. Fechar o arquivo.

Gerenciar manualmente o fechamento de um arquivo pode ser propenso a erros. Se o seu programa encontrar um erro enquanto o arquivo estiver aberto, ele pode não fechar corretamente. Para resolver isso, o Python fornece a instrução with. Ela gerencia automaticamente o fechamento do arquivo para você, mesmo que ocorram exceções, garantindo que os recursos do sistema sejam gerenciados corretamente.

Nota: Se você não está familiarizado com o uso do WebIDE (semelhante ao VS Code), aprenda primeiro neste laboratório.

A sintaxe básica é:

with open('filename.txt', 'mode') as file_variable:
    ## Perform operations on the file
  • open(): A função built-in (nativa) para abrir um arquivo.
  • 'filename.txt': O caminho para o arquivo.
  • 'mode': Um caractere que indica como o arquivo será usado (ex: 'r' para leitura (read), 'w' para escrita (write)).
  • file_variable: A variável que você usará para interagir com o objeto do arquivo.

Esta etapa é puramente conceitual. Nas próximas etapas, você aplicará este conhecimento para realizar operações reais de arquivo.

Abrindo e Lendo Arquivos

Nesta etapa, você aprenderá como abrir e ler arquivos usando a função open(). Abordaremos a leitura do arquivo inteiro, a leitura linha por linha para uma lista e a iteração sobre as linhas, o que é altamente eficiente para arquivos grandes.

O script de configuração já criou dois arquivos para você: hi.txt e sonnet29.txt.

Lendo um Arquivo Inteiro com read()

O método read() lê o conteúdo completo de um arquivo em uma única string.

  1. No explorador de arquivos à esquerda, abra o arquivo read_file.py.
  2. Adicione o seguinte código a ele. Este script abre hi.txt, lê seu conteúdo e o imprime no console.
## Read file using 'with' statement: automatically closes file when done
with open('/home/labex/project/hi.txt') as hello_file:
    hello_content = hello_file.read()  ## Read entire file content

print(hello_content)
  1. Para executar o script, abra um terminal e execute o seguinte comando:
python3 read_file.py

Você deverá ver o conteúdo de hi.txt impresso.

Hello World!

Lendo um Arquivo em uma Lista de Linhas com readlines()

O método readlines() lê todas as linhas de um arquivo e as retorna como uma lista de strings. Cada string na lista representa uma linha e inclui o caractere de nova linha (\n) no final.

  1. Modifique read_file.py com o seguinte código para ler sonnet29.txt.
## readlines() method: returns list of strings, one per line
with open('/home/labex/project/sonnet29.txt') as sonnet_file:
    lines = sonnet_file.readlines()  ## Returns list with each line as a string

print(lines)
  1. Execute o script novamente:
python3 read_file.py

A saída será uma lista de strings, onde cada string é uma linha do arquivo.

['When, in disgrace with fortune and men\'s eyes,\n', 'I all alone beweep my outcast state,\n', 'And trouble deaf heaven with my bootless cries,\n', 'And look upon myself and curse my fate,\n']

Iterando Sobre um Arquivo Linha por Linha

Para arquivos grandes, ler o conteúdo inteiro para a memória pode ser ineficiente. Uma abordagem melhor é iterar diretamente sobre o objeto de arquivo. Isso lê o arquivo linha por linha sem carregar o arquivo inteiro na memória.

  1. Modifique read_file.py pela última vez com o seguinte código.
## Iterate through file line by line (memory efficient for large files)
with open('/home/labex/project/sonnet29.txt') as sonnet_file:
    for line in sonnet_file:  ## File object is iterable
        print(line, end='')  ## Print without extra newline

Nota: Usamos end='' na função print() para evitar adicionar uma nova linha extra, já que cada line do arquivo já termina com uma.

  1. Execute o script:
python3 read_file.py

Isso imprimirá o conteúdo do arquivo, formatado perfeitamente.

When, in disgrace with fortune and men's eyes,
I all alone beweep my outcast state,
And trouble deaf heaven with my bootless cries,
And look upon myself and curse my fate,

Escrevendo em Arquivos

Nesta etapa, você explorará como escrever dados em arquivos. Abordaremos dois modos diferentes: modo de escrita ('w'), que sobrescreve qualquer conteúdo existente, e modo de anexação ('a'), que adiciona novos dados ao final de um arquivo.

Escrevendo em um Arquivo com o Modo 'w'

Quando você abre um arquivo no modo de escrita ('w'), um novo arquivo é criado se ele não existir. Se o arquivo já existir, todo o seu conteúdo é apagado antes que o novo conteúdo seja escrito.

  1. No explorador de arquivos, abra o arquivo write_file.py.
  2. Adicione o seguinte código a ele. Este script criará um arquivo chamado bacon.txt e escreverá uma única linha de texto nele. O método write() retorna o número de caracteres escritos.
## Write to file: 'w' mode overwrites existing file
with open('/home/labex/project/bacon.txt', 'w') as bacon_file:  ## 'w' = write mode
    chars_written = bacon_file.write('Hello world!\n')  ## Returns number of characters written

print(chars_written)
  1. Execute o script a partir do terminal:
python3 write_file.py

A saída mostra o número de caracteres escritos no arquivo.

13

Você pode agora ver um novo arquivo, bacon.txt, no seu explorador de arquivos.

Anexando a um Arquivo com o Modo 'a'

O modo de anexação ('a') é usado para adicionar dados ao final de um arquivo existente sem apagar seu conteúdo atual. Se o arquivo não existir, ele será criado.

  1. Modifique write_file.py para anexar outra linha a bacon.txt.
## Append to file: 'a' mode appends to existing file
with open('/home/labex/project/bacon.txt', 'a') as bacon_file:  ## 'a' = append mode
    chars_written = bacon_file.write('Bacon is not a vegetable.')

print(chars_written)
  1. Execute o script novamente:
python3 write_file.py

A saída mostra o número de caracteres da nova string.

25

Verificando o Conteúdo Final

Para confirmar que as operações de escrita e anexação funcionaram corretamente, vamos ler o conteúdo de bacon.txt.

  1. Modifique write_file.py pela última vez para ler e imprimir o conteúdo de bacon.txt.
with open('/home/labex/project/bacon.txt') as bacon_file:
    content = bacon_file.read()

print(content)
  1. Execute o script:
python3 write_file.py

A saída deve mostrar o conteúdo combinado das operações de escrita e anexação.

Hello world!
Bacon is not a vegetable.

Resumo

Parabéns por completar este laboratório sobre leitura e escrita de arquivos em Python!

Neste laboratório, você aprendeu as habilidades essenciais para I/O (Entrada/Saída) de arquivos. Você começou entendendo a importância da instrução with para o manuseio seguro e automático de arquivos.

Em seguida, você praticou várias maneiras de ler arquivos:

  • read() para obter o conteúdo inteiro como uma única string.
  • readlines() para obter uma lista de todas as linhas.
  • Iterar diretamente sobre o objeto de arquivo para uma maneira eficiente em termos de memória de processar arquivos grandes linha por linha.

Finalmente, você explorou como escrever em arquivos:

  • Usando o modo de escrita ('w') para criar um novo arquivo ou sobrescrever um existente.
  • Usando o modo de anexação ('a') para adicionar conteúdo ao final de um arquivo sem apagar seus dados anteriores.

Estas operações fundamentais são blocos de construção para aplicações mais complexas que precisam armazenar dados, ler configurações ou processar arquivos de texto.