1
resposta

Salvar uma classe em um arquivo de texto

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?

1 resposta

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.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!