1
resposta

Problema com pickle.load

estou criando um arquivo que insere dados varios candidatos em um arquivo .dat quando tento recupera-lo utilizando readlines() ele volta com formatação e caracteres incorretos e quando eu recupero com pickle load recupera o primeiro item ou todos quando eu sei o numero de itens mas ainda nao achei uma forma de automatizar o indice com o numero de linhas do arquivo, pode me ajudar?

#Arquivo Binario Gravacao import pickle ''' arq = open('eleicao.dat','ab') COD_CANDIDATO=input('Digite o codigo do canditato: ') nome=input('Digite o nome do candidato: ') cargo=input('digite o cargo do cadidato: ') regiao=input('digite a região: ') num_votos=input('digite o numero de votos: ') pickle.dump(COD_CANDIDATO, arq) pickle.dump(nome, arq) pickle.dump(cargo, arq) pickle.dump(regiao, arq) pickle.dump(num_votos, arq) x=input("tecle s para inserir novos candidatos ") arq.close( ) input('\nArquivo binario criado com sucesso!') ''' arq = open('eleicao.dat', 'rb')

COD_CANDIDATO=pickle.load(arq) nome=pickle.load(arq) cargo=pickle.load(arq) regiao=pickle.load(arq) num_votos=pickle.load(arq) linha=arq.readlines() print(linha) print('%s %s %s %s %s'%(COD_CANDIDATO,nome,cargo,regiao,num_votos))arq.close( ) input('\nArquivo binario lido com sucesso!')

1 resposta

Oi Leocadia! Como vai ?

Uma das maneiras de automatizar este processo, é utilizando o bloco try/except, ou seja, tentaremos fazer uma leitura do arquivo e caso esta leitura chegue a alguma condição de fim de linha(EOFError), finalizamos a leitura, dando um break no laço. Segue abaixo um exemplo:

with open('eleicao.dat', 'rb') as arq:
    while True:
        try:
            COD_CANDIDATO=pickle.load(arq) 
            nome=pickle.load(arq) 
            cargo=pickle.load(arq) 
            regiao=pickle.load(arq) 
            num_votos=pickle.load(arq) 
            print('%s %s %s %s %s'%(COD_CANDIDATO,nome,cargo,regiao,num_votos))
        except EOFError:
            break

Sobre o uso do with, é apenas uma maneira pythônica de se ler um arquivo, pois, utilizando este método, ele garante que o arquivo será fechado. Deixo como sugestão que você organize o seu código em funções, não somente pelo fato da reutilização, mas também para melhorar a legibilidade. Tudo bem ? :)

Qualquer dúvida estou a disposição. Espero ter ajudado. Bons estudos!!!