Arquivos em Modo Binário
Arquivos em Modo Binário
Arquivos em Modo Binário
objarquivo = open(nome_arquivo, modo)
Modos de Abertura:
arq = open('dados.dat', 'wb')
Biblioteca pickle
dump(objeto, refarquivo)
load(refarquivo)
Exemplo 1: uma lista
from pickle import dump, load
lista1 = [7, 40, 12, 0, -5]
print('Lista:', lista1)
arquivo = open('arquivo01.dat', 'wb')
dump(lista1, arquivo)
arquivo.close()
arquivo2 = open('arquivo01.dat', 'rb')
lista2 = load(arquivo2)
arquivo2.close()
print('Lista recuperada:', lista2)
Exemplo 2: duas listas em sequência
from pickle import dump, load
lista1 = [7, 40, 12, 0, -5]
lista2 = ['casa', 'carro', 'moto']
print('Lista 1:', lista1)
print('Lista 2:', lista2)
arquivo = open('arquivo02.dat', 'wb')
dump(lista1, arquivo)
dump(lista2, arquivo)
arquivo.close()
arquivo2 = open('arquivo02.dat', 'rb')
lista3 = load(arquivo2)
lista4 = load(arquivo2)
arquivo2.close()
print('Lista recuperada 1:', lista3)
print('Lista recuperada 2:', lista4)
Exemplo 3: dois objetos em sequência (1)
from pickle import dump, load
class Estudante:
def __init__(self,nome,matricula,anoNascimento):
self.nome = nome
self.matricula = matricula
self.anoNascimento = anoNascimento
estudante1 = Estudante('Marcos Santos',19211175, 1997)
estudante2 = Estudante('Lucas Silva',18111130, 1996)
print('Estudante 1 - Nome: %s, Matrícula: %d, Nascimento: %d' % (estudante1.nome, estudante1.matricula, estudante1.anoNascimento))
print('Estudante 2 - Nome: %s, Matrícula: %d, Nascimento: %d' % (estudante2.nome, estudante2.matricula, estudante2.anoNascimento))
# continua no slide seguinte
Exemplo 3: dois objetos em sequência (2)
# continuando o exemplo 3
arquivo = open('arquivo03.dat', 'wb')
dump(estudante1, arquivo)
dump(estudante2, arquivo)
arquivo.close()
arquivo2 = open('arquivo03.dat', 'rb')
estudante3 = load(arquivo2)
estudante4 = load(arquivo2)
arquivo2.close()
print('Estudante recuperado 1 - Nome: %s, Matrícula: %d, Nascimento: %d' % (estudante3.nome, estudante3.matricula, estudante3.anoNascimento))
print('Estudante recuperado 2 - Nome: %s, Matrícula: %d, Nascimento: %d' % (estudante4.nome, estudante4.matricula, estudante4.anoNascimento))
Exemplo 4: uma matriz 5x3
from pickle import dump, load
notas = []
for i in range(5):
linha = []
for j in range(3):
print('Para o aluno %d, digite a nota %d: '
% (i+1,j+1))
nota = float(input())
linha.append(nota)
notas.append(linha)
arquivo = open('arquivo04.dat', 'wb')
dump(notas, arquivo)
arquivo.close()
print('Arquivo salvo!')
arquivo2 = open('arquivo04.dat', 'rb')
notas2 = load(arquivo2)
arquivo2.close()
print('Arquivo carregado!')
print('\nValores lidos:\n')
for i in range(5):
for j in range(3):
print('%5.1f' % notas2[i][j], end = '')
print()
Exemplo 5: uma lista, elemento a elemento
from pickle import dump, load
lista1 = []
n = int(input("Digite o numero de elementos: "))
for i in range(n):
numero=int(input("Digite o elemento %d: " % (i + 1)))
lista1.append(numero)
# é possível gravar elemento a elemento da lista
arquivo = open('arquivo05.dat', 'wb')
for i in range(n):
dump(lista1[i], arquivo)
arquivo.close()
print('Arquivo salvo!')
lista2 = []
# depois, é possível ler elemento a elemento
arquivo2 = open('arquivo05.dat', 'rb')
for i in range(n):
elemento = load(arquivo2)
lista2.append(elemento)
arquivo2.close()
print('Arquivo carregado!')
print('Lista recuperada: ')
for i in range(n):
print(lista2[i])
Exemplo 6: recuperando uma lista cujo tamanho é desconhecido
from pickle import load
# quando não sabemos quantos elementos tem a lista,
# podemos usar EOFError – exceção disparada quando
# se chega ao final do arquivo
lista = []
arquivo = open('arquivo05.dat', 'rb')
while True:
try:
elemento = load(arquivo)
lista.append(elemento)
except EOFError:
break
arquivo.close()
print('Arquivo carregado!')
print('Lista recuperada: ')
for elemento in lista:
print(elemento)
Exemplo 7: uma lista de objetos
from pickle import dump, load
class Estudante:
def __init__(self,nome,matricula,anoNascimento):
self.nome = nome
self.matricula = matricula
self.anoNascimento = anoNascimento
estudantes = []
n = int(input("Digite o numero de estudantes: "))
for i in range(n):
nome = input('Nome: ')
matricula = int(input('Matrícula: '))
anoNascimento = int(input('Ano de nascimento: '))
estudante = Estudante(nome, matricula, anoNascimento)
estudantes.append(estudante)
arquivo = open('arquivo07.dat', 'wb')
dump(estudantes, arquivo)
arquivo.close()
print('Arquivo salvo!')
arquivo2 = open('arquivo07.dat', 'rb')
estudantes2 = load(arquivo2)
arquivo2.close()
print('Arquivo carregado!')
print('Lista recuperada de estudantes: ')
for estudante in estudantes2:
print('Nome: %s, Matrícula: %d, Nascimento: %d' % (estudante.nome, estudante.matricula, estudante.anoNascimento))
Exemplo 8a: salvando uma lista de objetos, gravando um objeto de cada vez
from pickle import dump
class Estudante:
def __init__(self,nome,matricula,anoNascimento):
self.nome = nome
self.matricula = matricula
self.anoNascimento = anoNascimento
# Se o processo de entrada de dados é lento,
# é possível salvar os estudantes um a um.
estudantes = []
n = int(input("Digite o numero de estudantes a gravar: "))
for i in range(n):
nome = input('Nome: ')
matricula = int(input('Matrícula: '))
anoNascimento = int(input('Ano de nascimento: '))
estudante = Estudante(nome, matricula, anoNascimento)
estudantes.append(estudante)
# salvando um estudante por vez
arquivo = open('arquivo08.dat', 'ab')
dump(estudante, arquivo)
arquivo.close()
print('Estudante salvo no arquivo!')
Exemplo 8b: lendo uma lista de objetos, carregando um objeto de cada vez
from pickle import load
class Estudante:
def __init__(self,nome,matricula,anoNascimento):
self.nome = nome
self.matricula = matricula
self.anoNascimento = anoNascimento
# Carregando os estudantes salvos em outra lista
estudantes2 = []
arquivo2 = open('arquivo08.dat', 'rb')
while True:
try:
estudante = load(arquivo2)
estudantes2.append(estudante)
except EOFError:
break
arquivo2.close()
print('Arquivo carregado!')
print('Lista recuperada de estudantes: ')
for estudante in estudantes2:
print('Nome: %s, Matrícula: %d, Nascimento: %d' %
(estudante.nome, estudante.matricula,
estudante.anoNascimento))