Jump to content
flands

Erro em leitura de arquivo binário

Recommended Posts

Pessoal, bom dia!

 

Estou tentando ler o conteúdo de um arquivo binário em Python para montar um dicionário, mas ao atingir o final do arquivo o programa está "voando" e não estou conseguindo capturar a exceção. Quando faço o debug, vejo que ele inclui os dados no dicionário corretamente, mas ao chegar na última posição do arquivo, o comando pickle.load(arquivo) "voa" e nenhuma outra linha de código após o while é executada. Nem o comando arquio.close() é executado.

Abrindo o arquivo .dat em um bloco de notas, a exibição dele é semelhante ao seguinte trecho:

S'001'
p0
.S'Toninho Silva'
p0
.S'Prefeito'
p0
.S'Tijuca'
p0
.S'2300'
p0
.

O código que lê do arquivo binário, grava no dicionário e, ao final, exibe na tela o resultado (que é parte do conteúdo do dicionário) segue abaixo:

try:
    dic_votos_candidato = dict()
    arquivo = open('eleicoes.dat', 'rb')
    while arquivo:
        soma = 0
        cod_candidato = pickle.load(arquivo)
        nome_candidato = pickle.load(arquivo)
        cargo = pickle.load(arquivo)
        regiao = pickle.load(arquivo)
        num_votos = pickle.load(arquivo)
        if dic_votos_candidato.get(nome_candidato):
            soma = int(dic_votos_candidato[nome_candidato])
            soma = soma + int(num_votos)
            dic_votos_candidato[nome_candidato] = soma
        else:
            dic_votos_candidato[nome_candidato] = int(num_votos)
    arquivo.close()
    for chave in dic_votos_candidato.keys():
        print chave, dic_votos_candidato[chave]
except IOError:
    print "Erro ao abrir o arquivo. Verifique se o arquivo foi criado."
    print "Caso o arquivo ainda nao exista, use a opcao 1 do menu principal para cria-lo."
    exit()
finally:
    opcao = raw_input('\nPara continuar, digite a opcao desejada: ')
    trata_listar(opcao)

Desde já agradeço a ajuda!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Gui2000
      Linguagem C
      Obs: A categoria não possua C.
      Se não entenderam posso melhorar o texto. Preciso de uma luz nesse código.

      O problema real é que pretendo criar uma struct para letras que vai guardar uma letra e uma para nomes e com isso pretendo criar uma lista encadeada simples para a struct letras pegar apenas três letras.

      Problema

      (Após criar as structs pretendo fazer com um ponteiro dentro da struct letra aponte para a struct de nomes e com isso vou conseguir criar três letras com nome respectivos as iniciais, ao passar cada posição das letras para um vetor de três espaços, e fazendo com que cada endereço novo aponte para diferentes nomes a partir da letra) , exemplo:
      A - Adriano..
      B - Bruno..
      C - Carlos..
      Quero fazer com que a partir das letras eu possa apontar para os nomes.

      Linguagem C. E só estou tentando criar no papel no momento.

      Meu nome é Guilherme. Não criei o código ainda é um pedido do meu professor, não peço que façam por mim apenas que me ajudem na implementação e se minha lógica está errada, onde e por favor me expliquem. ^^
    • By fagner552
      O Voleibol é um esporte praticado numa quadra dividida em duas partes por uma rede, possuindo duas equipes
      de seis jogadores em cada lado. O objetivo da modalidade é fazer passar a bola sobre a rede de modo a que a
      bola toque no chão dentro da quadra adversária, ao mesmo tempo que se evita que os adversários consigam
      fazer o mesmo. No Brasil esta modalidade ganhou muita popularidade na década de 80 com a conhecida
      “geração de prata” da seleção brasileira de vôlei. Este esporte também é muito praticado em competições
      recreativas.
      Baseado nesta característica do vôlei o departamento de marketing de uma determinada empresa resolveu
      promover um jogo comemorativo para as festas de final de ano. Para haver equilíbrio na disputa estabeleceu as
      seguintes regras:
      - Participarão do jogo as primeiras 12 pessoas inscritas;
      - As equipes serão definidas por sorteio.
      Considerando estas regras foi solicitado ao setor de informática o desenvolvimento de um programa em Python
      para:
      a) Permitir o cadastro do Número da inscrição, Nome, Idade e Altura das 12 primeiras pessoas inscritas;
      b) Imprimir a lista dos inscritos (veja lay-out abaixo); 
      c) Montar (randomicamente) os dois times. Imprimir as equipes; 
      d) Imprimir a média de idade e de altura de cada equipe.
       
      Insc Nome Alt Idade
      01 ana 1.70 20
      02 jose 1.65 23
      03 pedro 1.80 21
      04 maria 1.70 25
      05 diana 1.75 26
      06 rui 1.90 18
      07 edna 1.70 23
      08 caio 1.85 21
      09 lea 1.60 26
      10 hugo 1.75 25
      11 tania 1.80 24
      12 marta 1.70 26

      Equipe 1:
      Insc Nome Alt Idade
      09    lea  1.60     26
      03   pedro 1.80   21
      04   maria 1.70   25
      08   caio  1.85    21
      06   rui    1.90    18
      10   hugo 1.75  25
      Media de idade da equipe 1: 22.67
      Media de altura da equipe 1: 1.77
       
      Equipe 2:
      Insc Nome Alt Idade
      01   ana   1.70   20
      07 edna    1.70      23
      11 tania   1.80      24
      12 marta 1.70    26
      02 jose    1.65       23
      05 diana  1.75     26
      Media de idade da equipe 2: 23.67
      Media de altura da equipe 2: 1.72
       
       
      Até agora fiz até a letra b, que no caso ele dá os inscritos gerais, queria saber se alguem poderia me dar um help de como sortear nesse formato de duas equipes ja colocando as medias em cada uma delas?
    • By tiagoban
      Estou testando o envio de mensagem para whatsapp via Python, queria testar enviar imagem tambem, porem nao sei qual o codigo usar, alguem sabe como proceder?
      Segue o codigo utilizado até o momento.
       
      from time import sleep from selenium.webdriver.common.by import By from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait import socket client = Client() message_text='Oi, esta é uma mensagem automatica criada.' # message no_of_message=1 # no. of time moblie_no_list=[554899999999] # list of phone number def element_presence(by,xpath,time): element_present = EC.presence_of_element_located((By.XPATH, xpath)) WebDriverWait(driver, time).until(element_present) def is_connected(): try: # connect to the host -- tells us if the host is actually # reachable socket.create_connection(("www.google.com", 80)) return True except : is_connected() driver = webdriver.Chrome(executable_path="chromedriver.exe") driver.get("http://web.whatsapp.com") sleep(10) #wait time to scan the code in second def send_whatsapp_msg(phone_no,text): driver.get("https://web.whatsapp.com/send?phone={}&source=&data=#".format(phone_no)) try: driver.switch_to_alert().accept() except Exception as e: pass try: element_presence(By.XPATH,'//*[@id="main"]/footer/div[1]/div[2]/div/div[2]',30) txt_box=driver.find_element(By.XPATH , '//*[@id="main"]/footer/div[1]/div[2]/div/div[2]') global no_of_message for x in range(no_of_message): txt_box.send_keys(text) txt_box.send_keys("\n") except Exception as e: print("invailid phone no :"+str(phone_no)) for moblie_no in moblie_no_list: try: send_whatsapp_msg(moblie_no,message_text) except Exception as e: sleep(10) is_connected()
    • By alekoxid
      Olá pessoal, estou fazendo um programa em Python, baseado em outro em C.
       
      Como eu escreveria esse trecho aqui em python?
      Se alguém puder me explicar, eu agradeço
       
      Código:
      #S é definido como 1000000
      #n_pts=20
       
       
      Void numeric(){
            float a, b , c, d;
            float P_[100],Q_[100], T[100];
            float den;
            float dx=L/(n_pts-1);
       
           P_[1]=0;
           Q_[1]=Ta;
           T[1]=Ta;
           T[n_pts]=Tb;
           a=(2*k/dx);
           c=d=k/dx;
           d=S*dx;
           int n;
       
          for ( n=2; n< n_pts; n++){
          den= (a-c*P_[n-1]);
          P_[n]= b/ den;
         Q_[n]= (d+c*Q_[n-1])/den
         }
       
        printf("\n\n Solução : \n")
        print("\n Ponto %2d T=%4.1f C", n_pts, T[n_pts]);
       
      for ( n=n_pts-1; n>1; n--){
          T[n]=Q_[n]+P_[n]*T[n+1];
          printf("\n Ponto %2 T=%4.1f C", n, T[n]);
          }
    • By Shirahama Kenichi
      Olá tudo bem?
      Estou tentando resolver um problema e ainda não achei a solução. Seguinte, estou desenvolvendo uma interface para gerenciamento de switches e preciso pegar uma informação na interface web (PHP) e passar essa informação para um script em Python. Simplificando seria mais ou menos assim: Interface Web: "Digite o texto para ser exibido" o usuário digita "Hello World". Script Python: Pega o que o usuário digitou (no caso "Hello World") e executa o comando para exibir a mensagem. O usuário entra com a informação através de uma text box e após clicar em um button tudo aconteceria. Vocês sabem como eu posso fazer pra isso funcionar, pois estou bem perdido e não consigo resolver isso de forma alguma.
      Obrigado!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.