1
resposta

EOFError: Ran out of input

meu código está assim mas estou recebendo o erro "EOFError: Ran out of input"

#contatos_utils.py
import csv, pickle
from contato import Contato

def csv_para_contatos(caminho, encoding='latin_1'):
    contatos=[]

    with open(caminho, econding=encoding) as arquivo:
        leitor = csv.reader(arquivo)

        for linha in leitor:
            id, nome, email = linha

            contato = Contato(id, nome, email)
            contatos.append(contato)

        return contatos

def contatos_para_pickle(contatos, caminhho):
    with open(caminho, mode='wb') as arquivo:
        pickle.dump(contatos, arquivo)

def pickle_para_contatos(caminho):
    with open(caminho, mode='rb') as arquivo:
        contatos = pickle.load(arquivo)

    return contatos

    #contato.py
    class Contato:

    def __init__(self, id, nome, email):
        self.id = id
        self.nome = nome
        self.email = email

        #main.py
        import contatos_utils

try:
    # contatos = contatos_utils.csv_para_contatos('dados/contatos.csv')
    # contatos_utils.contatos_para_pickle(contatos,dados/contatos.pickle')

    contatos = contatos_utils.pickle_para_contatos('dados/contatos.pickle')

    for contato in contatos:
        print(f'{contato.id} - {contato.nome} - {contato.email}')

except FileNotFoundError:
    print('Arquivo não encontrado')

except PermissionError:
    print('Sem permissao de escrita')
1 resposta

Olá Lucas, tudo bem com você?

O erro EOFError é apresentado devido a tentativa de leitura de um arquivo vazio, nesse caso o arquivo contatos.pickle.

Recomendo que verifique se os arquivos contatos.csv e o contatos.pickle estão sem dados (sem os contatos salvos), caso o arquivo contatos.csv esteja, basta copiar os contatos abaixo e colar dentro do arquivo e salvá-lo.

1,Guilherme,guilherme@guilherme.com.br
2,Elias,elias@elias.com.br
3,Gabriel,gabriel@gabriel.com.br
4,Anderson,anderson@anderson.com.br
5,Alex,alex@alex.com.br
6,Vini,vini@vini.com.br
7,Letícia,leticia@leticia.com.br
8,Giulia,giulia@giulia.com.br
9,Felipe,felipe@felipe.com.br
10,Luísa,luisa@luisa

Após a confirmação de que o arquivo contatos.csv contém os dados dos usuários, podemos criar novamente o arquivo contatos.pickle, para isso será necessário realizarmos pequenas correções nos códigos postados.

Arquivo contatos_utils.py

Nesse arquivo temos os seguintes pontos que são necessárias mudanças:

  • Na função csv_para_contatos durante o uso da cláusula with, será necessário modificar a palavra econding= para encoding=.
  • Na função contatos_para_pickle modificar o nome usado no atributo, modificar de caminhho para caminho.

Arquivo main.py

Nesse arquivo, no momento em que é feito a chamada da função contatos_para_pickle quando foi passado o caminho para o arquivo está faltando uma vírgula, no início do caminho, abaixo a linha com a correção.

contatos_utils.contatos_para_pickle(contatos, 'dados/contatos.pickle')

Após realizar as correções, os retire as cerquilha (#) que estão nas linhas de leitura do arquivo contatos.csv e na linha de criação do arquivo contatos.pickle dentro do arquivo main.py.

Nesse momento, basta executar o arquivo main.py que será criado o arquivo contatos.pickle.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

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