Seja uma classe criada no Python e vários objetos criados a partir dessa classe, como posso armazenar os dados guardados por esses objetos em um arquivo de texto ou arquivo binário?
Seja uma classe criada no Python e vários objetos criados a partir dessa classe, como posso armazenar os dados guardados por esses objetos em um arquivo de texto ou arquivo binário?
Olá Eliabe, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Podemos trabalhar com a biblioteca pickle
, que será responsável por realizar a serialização (conversão em binário) e desserializar (conversão em objeto), os objetos serializados serão salvos com a codificação em binário e mantendo o seu estado, permitindo o seu compartilhamento e uso posterior, como apresentado no código abaixo:
import pickle
class Funcionarios:
def __init__(self, id, nome, funcao, idade):
self.id = id
self.nome = nome
self.funcao = funcao
self.idade = idade
funcionario1 = Funcionarios(1, 'Felippe', 'Suporte', 29)
funcionario2 = Funcionarios(2, 'Rafael', 'Técnico', 29)
lista_de_funcionarios = [funcionario1, funcionario2]
# salvando os dados
for obj_funcionario in lista_de_funcionarios:
with open('funcionarios_binarios', 'ab') as arquivo_binario:
pickle.dump(obj_funcionario, arquivo_binario)
# lendo os dados
with open("funcionarios_binarios", "rb") as arquivo_binario:
while True:
try:
obj = pickle.load(arquivo_binario)
print(obj.nome)
except EOFError:
break
Para salvamos um objeto em um arquivo no formato .txt
podemos fazer conforme apresentado no código abaixo:
class Funcionarios:
def __init__(self, id, nome, funcao, idade):
self.id = id
self.nome = nome
self.funcao = funcao
self.idade = idade
funcionario1 = Funcionarios(1, 'Felippe', 'Suporte', 29)
funcionario2 = Funcionarios(2, 'Rafael', 'Técnico', 29)
lista_de_funcionarios = [funcionario1, funcionario2]
# salvando os dados
for obj_funcionario in lista_de_funcionarios:
with open('funcionarios.txt', 'a') as arquivo_texto:
arquivo_texto.write(f'{obj_funcionario.id},{obj_funcionario.nome},{obj_funcionario.funcao},{obj_funcionario.idade}\n')
# lendo os dados
with open('funcionarios.txt', 'r') as arquivo_texto:
dados = arquivo_texto.readlines()
for index, dado in enumerate(dados):
id, nome, funcao, idade = dado.split(",")
globals()[f"obj_{index+1}"] = Funcionarios(id, nome, funcao, idade)
print(obj_1.nome)
print(obj_2.nome)
Na Alura temos um curso que aborda a interação com arquivos com o uso do Python:
Para saber um pouco mais sobre o uso da biblioteca pickle
recomendo também a leitura do seguinte artigo:
Sobre a serialização e desserialização recomendo a leitura do seguinte artigo:
Os artigos estão em inglês, caso tenha dificuldades com o idioma, recomendo o uso do tradutor do navegador.
Em caso de dúvidas, encontro-me à disposição.
Abraços e bons estudos.