Código do contatos.utils.py
import csv, pickle, json
from contato import Contato
def csv_para_contatos(caminho):
contatos = []
with open(caminho, encoding='latin_1') as arquivo:
leitor = csv.reader(arquivo) #csv.reader() faz a quebra automática das virgulas geradas nos arquivos csv. Essa quebra ajuda quando for colocar o contéudo do csv em uma classe
for linha in leitor:
id = linha[0]
nome = linha[1]
email = linha[2]
contato = Contato(id, nome, email)
contatos.append(contato)
return contatos
def contatos_para_pickle(contatos, caminho):
with open(caminho, mode='wb') as arquivo: #wb é o modo de escrita e binário
pickle.dump(contatos, arquivo)
def pickle_para_contatos(caminho):
with open(caminho, mode='rb') as arquivo:
contatos = pickle.load(arquivo)
return contatos
def contatos_para_json(contatos, caminho):
with open(caminho, mode='w') as arquivo:
json.dump(contatos, arquivo, default=contatopara_json)
def contatopara_json(contato):
contato.dict
def json_para_contatos(caminho):
contatos = []
with open(caminho) as arquivo:
contatos_json = json.load(arquivo)
for contato in contatos_json:
c = Contato(**contato)
contatos.append(c)
return contatos
**# Código do principal.py**
import contatos_utils
try:
contatos = contatos_utils.csv_para_contatos('contatos.csv')
# contatos_utils.contatos_para_pickle(contatos, 'contatos.pickle')
# contatos = contatos_utils.pickle_para_contatos('contatos.pickle')
contatos_utils.contatos_para_json(contatos, 'contatos.json')
contatos = contatos_utils.json_para_contatos('contatos.json')
for contato in contatos:
print(f'{contato.id} - {contato.nome} - {contato.email}')
except FileNotFoundError:
print('Arquivo não encontrado')
except PermissionError:
print('Sem permissão de escrita')