3
respostas

Erro na leitura dos dados

Meu programa leu somente a primeira linha do arquivo csv. O que devo fazer?

3 respostas
import csv 

def carregar_acessos():

    dados = []
    marcacoes = []

    #arquivo = open('acesso.csv', 'rb'), delimitador = ',')
    leitor = csv.reader (open('acesso.csv'), delimiter = ',')

    for home,como_funciona,contato,comprou in leitor: 

        dados.append([home,como_funciona,contato]) 
        marcacoes.append(comprou) 

        return dados, marcacoes

Gabriel, como o seu return está dentro do for, ele está lendo a primeira linha e logo retornando! Esse return não pode ficar indentado no mesmo níver que o for

Eu tive problema Gabriel com a função next() que é apresentada a seguir (estou usando o Python 3.5). Eu alterei o código para o seguinte:

#Script para carregar os dados em uma lista
#Pacote para trabalhar com arquivos CSV
import csv

#Função para carregar os dados e os marcadores
def carregar_dados():
    #Cria duas listas vázias para trazer os dados do arquivo
    dados = []
    marcadores = []

    #Abre o arquivo em modo de leitura
    #ATENÇÃO: O modo de leitura 'rb' abre os arquivos no seu formato de byte, enquanto que  'r' abre como string
    arquivo = open('acesso_pagina.csv', 'r')

    #Para acessar os dados no arquivo, utilizar um leitor, que passa por cada uma das linhas do arquivo
    leitor = csv.reader(arquivo)

    #Para pular uma linha no leitor, por exemplo o cabeçalho
    #É necessário utilizar essa sintaxe a partir do Python 3.5
    next(leitor)

    #Pega cada linha do arquivo e carrega para as listas, utilizando os nomes das colunas
    for acessou_home, acessou_como_funciona, acessou_contato, comprou in leitor:
        #Coloca uma nova lista em dados
        dados.append(
            [int(acessou_home), int(acessou_como_funciona), int(acessou_contato)]
        )

        #Coloca um novo marcado
        marcadores.append(int(comprou))

    #Devolve as duas listas
    return dados, marcadores