Atualizado: 04/11/2024

Arquivos Binários - Python

Diferentemente dos arquivos de texto, os arquivos binários armazenam informações como um conjunto de bytes. Para abrir um arquivo binário para leitura ou escrita, é necessário utilizar o modo "b" junto com o modo de leitura "r" ou gravação "w".

Na leitura, obtemos o conteúdo do arquivo como um conjunto de bytes, enquanto na escrita, o método write() recebe um conjunto de bytes como entrada. Abaixo está um exemplo de como copiar um arquivo binário:

FILENAME = "forest.png"             # nome do arquivo de leitura
NEWFILENAME = "forest_new.png"       # nome do arquivo de gravação

# Lê o arquivo e armazena os dados em image_data
with open(FILENAME, "rb") as file:
    image_data = file.read()
    
# Grava os bytes lidos em um novo arquivo
with open(NEWFILENAME, "wb") as file:
    file.write(image_data)

print(f"Arquivo {FILENAME} copiado para {NEWFILENAME}")

Neste código, o arquivo localizado no caminho especificado por FILENAME (neste caso, a imagem "forest.png") é lido em formato binário, e os bytes resultantes são armazenados na variável image_data. Em seguida, esses bytes são escritos em um novo arquivo, especificado por NEWFILENAME, copiando assim o conteúdo de um arquivo para outro.

Módulo pickle

O Python também oferece o módulo embutido pickle para facilitar o trabalho com arquivos binários. Esse módulo simplifica o armazenamento e a recuperação de objetos Python em arquivos binários. Ele fornece dois métodos principais:

  • dump(obj, file): grava o objeto obj em um arquivo binário file.

  • load(file): lê dados de um arquivo binário e os converte de volta para um objeto Python.

Abaixo está um exemplo de como salvar os valores de duas variáveis em um arquivo binário:

import pickle

FILENAME = "user.dat"

name = "Tom"
age = 19

# Grava os objetos name e age em um arquivo binário
with open(FILENAME, "wb") as file:
    pickle.dump(name, file)
    pickle.dump(age, file)

# Lê os objetos do arquivo binário
with open(FILENAME, "rb") as file:
    name = pickle.load(file)
    age = pickle.load(file)
    print("Nome:", name, "\nIdade:", age)

A função dump grava os dois objetos em sequência no arquivo. Ao ler o arquivo, podemos recuperar esses objetos na mesma ordem usando a função load. O resultado exibido no console será:

Nome: Tom
Idade: 19

Agora, veja como podemos armazenar e ler uma lista de objetos:

import pickle

FILENAME = "users.dat"

users = [
    ["Tom", 28, True],
    ["Alice", 23, False],
    ["Bob", 34, False]
]

# Grava a lista de usuários em um arquivo binário
with open(FILENAME, "wb") as file:
    pickle.dump(users, file)

# Lê a lista de usuários do arquivo binário
with open(FILENAME, "rb") as file:
    users_from_file = pickle.load(file)
    for user in users_from_file:
        print(user)

De acordo com o objeto que foi gravado usando a função dump, o mesmo será retornado pela função load ao ler o arquivo.

O resultado exibido no console será:

["Tom", 28, True]
["Alice", 23, False]
["Bob", 34, False]

Dessa forma, o módulo pickle permite a fácil gravação e leitura de conjuntos complexos de dados em arquivos binários, preservando a estrutura dos objetos originais.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com