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"
"r"
"w"
Na leitura, obtemos o conteúdo do arquivo como um conjunto de bytes, enquanto na escrita, o método write()
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
"forest.png"
image_data
NEWFILENAME
Módulo pickle
O Python também oferece o módulo embutido pickle
: grava o objetodump(obj, file)
em um arquivo binárioobj
.file
: lê dados de um arquivo binário e os converte de volta para um objeto Python.load(file)
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
load
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
load
O resultado exibido no console será:
["Tom", 28, True] ["Alice", 23, False] ["Bob", 34, False]
Dessa forma, o módulo pickle