Sample.csv contém o seguinte:
NAME Id No Dept
Tom 1 12 CS
Hendry 2 35 EC
Bahamas 3 21 IT
Frank 4 61 EE
E o arquivo Python contém o seguinte código:
import csv
ifile = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
print (row)
Quando executo o código acima em Python, recebo a seguinte exceção:
O arquivo "csvformat.py", linha 4, na linha da leitura: _csv.Error: o iterador deve retornar cadeias, não bytes (você abriu o arquivo no modo de texto?)
Como posso corrigir isso?
python
python-3.x
csv
Pika, o Mago das Baleias
fonte
fonte
Eu apenas corrigi esse problema com o meu código. O motivo pelo qual está lançando essa exceção é porque você tem o argumento
rb
. Mude isso parar
.Seu código:
Novo Código:
fonte
Seu problema é que você tem
b
oopen
sinalizador. A sinalizaçãort
(leitura, texto) é o padrão; portanto, usando o gerenciador de contexto, basta fazer o seguinte:O gerenciador de contexto significa que você não precisa de tratamento genérico de erros (sem o qual pode ficar preso com o arquivo aberto, especialmente em um intérprete), porque ele fechará automaticamente o arquivo em caso de erro ou sair do contexto.
O acima é o mesmo que:
ou
fonte
with
afirmação aka gerente de contexto não tem nada a ver com essa pergunta!No Python3,
csv.reader
espera-se, que tenha passado iterável retorna strings, não bytes. Aqui está mais uma solução para esse problema, que usa ocodecs
módulo:fonte
Eu tive esse erro ao executar um script python antigo desenvolvido com o Python 2.6.4
Ao atualizar para a 3.6.2, tive que remover todos os parâmetros 'rb' das chamadas em aberto para corrigir esse erro de leitura do csv.
fonte