2
respostas

Leitura do CSV em binário

Como que você conseguiram lêr o arquivo CSV em binário? arquivo = open('acesso.csv', 'rb')

Eu tentei aqui de diversas formas e não consegui só funciona em modo leitura: arquivo = open('acesso.csv', 'r')

Erro que retorna: _csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

2 respostas

Ola Silvano,

Verifique se você não está esquecendo o comando que pula a primeira linha do arquivo .csv (o cabeçalho)

leitor.next()

Está linha é formada de strings de caracteres e você está abrindo no modo de leitura que lê Zeros e Uns. Então se você não adicionar o comando dará esse erro:

invalid literal for int() with base 10: 'acessou_home'

O meu código ficou assim:

import csv

def carregar_acessos():
    #Arreys para insercao de dados
    X = []
    Y = []

    arquivo = open('acesso.csv', 'rb')

    leitor = csv.reader(arquivo)

    #Pula a primeira linha do Arquivo na leitura
    leitor.next()

    for home,como_funciona,contato,comprou in leitor:
        dado = [int(home), int(como_funciona), int(contato)]
        X.append(dado)
        Y.append(int(comprou))

    return X, Y

Coloquei em uma função para chamar no arquivo principal, mas você pode adaptar se quiser e chamar os comandos diretamente.

Caso não resolva, você poderia passar o código para podermos te ajudar melhor?

Espero ter ajudado, Um abraço.

Obrigado pela respostas, consegui resolver é a versão do python que estou usando que não pode fazer esse tipo de leitura no arquivo.

Ficou dessa forma:

import csv
def carregar_acessos():

    x = []#x
    y = []#resultado

    arquivo = open('acesso.csv', 'r')
    leitor = csv.reader(arquivo)
    next(leitor)
    print(type(leitor))
    for acessou_home, acessou_como_funciona, acessou_contato, comprou in leitor:
        x.append([acessou_home, acessou_como_funciona, acessou_contato])
        y.append(comprou)
    return x, y