Arquivos em Python

Laboratório de Programação — Ciência da Computação • UFPI

Conceitos, tipos (texto × binário), leitura/gravação, modos, with, contagem e exemplos práticos — com syntax highlighting

O que é um arquivo?

  • Coleção de informações digitalizadas armazenadas em um dispositivo (HDD, SSD, SD, nuvem).
  • Possui nome e extensão (indica o tipo e software associado).
  • Usado para persistir dados e compartilhá-los entre programas/sistemas.

Texto × Binário

  • Texto: legível, codificações como ASCII/UTF‑8 (.txt, .csv, .json, .html, .py).
  • Binário: bytes “brutos”, não legíveis (.jpeg, .mp3, .mp4, .otf, executáveis).

Sistema de Arquivos (FS)

  • Organiza, nomeia, armazena e manipula arquivos.
  • Ex.: FAT/NTFS (Windows), ext2/3/4 (Linux/Android), HFS/APFS (macOS/iOS).

Fluxo básico de leitura

  • SO solicita leitura ao controlador de disco → dados vão à RAM.
  • CPU processa; controlador de vídeo envia ao display.

Visão simplificada da cadeia HW/SO durante uma leitura.

A função open() em Python

  • Cria um objeto arquivo para leitura/gravação.
  • Assinatura (doc oficial): open(file, mode='r', ...)
  • Feche o arquivo após o uso: f.close() — ou prefira with.

Ler tudo de uma vez

meu_arquivo = open('nomes.txt', mode='r')
conteudo = meu_arquivo.read()
print(conteudo)
meu_arquivo.close()

Ler linha a linha

meu_arquivo = open('nomes.txt', mode='r')
for linha in meu_arquivo:
    print(linha)          # inclui '\n'
meu_arquivo.close()

# Sem pular linha extra:
meu_arquivo = open('nomes.txt', mode='r')
for linha in meu_arquivo:
    print(linha, end='')  # remove a quebra extra
meu_arquivo.close()

Contagens úteis

# caracteres
with open('nomes.txt', 'r') as f:
    conteudo = f.read()
qtd_caracteres = len(conteudo)
print(f'Chars: {qtd_caracteres}')

# linhas
qtd_linhas = 0
with open('nomes.txt', 'r') as f:
    for _ in f:
        qtd_linhas += 1
print(f'Linhas: {qtd_linhas}')

Acrescentar conteúdo (append)

meu_arquivo = open('nomes.txt', mode='a')
meu_arquivo.write('Maria Joaquina de Amaral Pereira Goes\n')
meu_arquivo.close()

with open('nomes.txt', 'r') as f:
    print(f.read())

Context manager (with)

# Fecha automaticamente (mesmo em erro)
with open('nomes.txt', mode='r') as meu_arquivo:
    conteudo = meu_arquivo.read()
    print(conteudo)

Evita esquecimentos e vazamentos de recursos.

Modos mais usados

  • 'r' — leitura (erro se não existir)
  • 'a' — anexar (cria se não existir)
  • 'w' — escrita sobrescrevendo (cria se não existir)
  • 't' — texto (padrão) • 'b' — binário

Sobrescrever conteúdo

with open('nomes.txt', mode='w') as f:
    f.write('Armando Soares Sousa\n')

with open('nomes.txt', mode='r') as f:
    print(f.read())

Texto × Binário (modos)

  • Texto ('t'): interpreta como Unicode; suporta encoding= e converte quebras de linha.
  • Binário ('b'): lê/grava bytes crus; sem codificação.

Lendo binários

# Arquivo binário (ex.: imagem)
with open("space_picasso.jpeg", "rb") as file:
    image_data = file.read()
    print(type(image_data), len(image_data))  # bytes, número de bytes

Exibir imagem (Pillow)

from PIL import Image

image_path = "space_picasso.jpeg"

try:
    image = Image.open(image_path)  # abre via Pillow
    image.show()                    # visualiza no viewer padrão
except FileNotFoundError:
    print(f"Arquivo não encontrado: {image_path}")

Biblioteca: Pillow. Útil para manipular e visualizar imagens.

Dicas & Boas práticas

  • Prefira with open(...).
  • Trate encoding quando precisar de acentos: open(..., encoding="utf-8").
  • Para grandes arquivos texto, percorra linha a linha para evitar alto uso de memória.
  • Escolha o modo correto: 'a' (acrescentar) vs 'w' (sobrescrever).
  • Para binários (imagens, áudio), use 'rb'/'wb'.

Exercícios rápidos (lab)

  1. Baixe nomes.txt e conte linhas, palavras e caracteres.
  2. Acrescente três nomes ao final e valide.
  3. Reescreva o arquivo com um único nome (teste 'w').
  4. Faça um script que leia um .jpeg em 'rb' e imprima quantos bytes possui.

Cheat Sheet

# Abrir: open(caminho, mode='r', encoding=None)
# Modos: 'r' ler | 'w' escrever (sobrescreve) | 'a' anexar
#        + 't' texto (padrão) | 'b' binário  → ex.: 'rb', 'wb'
# Ler:   f.read(); f.readline(); iterar por linhas
# Escrever: f.write(), f.writelines()
# Fechar: f.close()  # ou use 'with' que fecha sozinho
# Contagem: len(f.read()); sum(1 for _ in f)
# Binário: with open('img.jpg','rb') as f: data = f.read()

Conclusões

  • Arquivos são essenciais para persistência e troca de dados.
  • Domine open(), with, modos e leitura/gravação.
  • Entenda texto vs binário para escolher o modo adequado.