versiones guia español descargar actualizar python-3.x

python 3.x - guia - csv.Error: iterator debería devolver cadenas, no bytes



qgis manual (4)

Acabo de solucionar este problema con mi código. La razón por la que arroja esa excepción es porque tienes el argumento rb . Cambiar eso a r .

Tu codigo:

import csv ifile = open(''sample.csv'', "rb") read = csv.reader(ifile) for row in read : print (row)

Nuevo código:

import csv ifile = open(''sample.csv'', "r") read = csv.reader(ifile) for row in read : print (row)

Sample.csv contiene lo siguiente

NAME Id No Dept Tom 1 12 CS Hendry 2 35 EC Bahamas 3 21 IT Frank 4 61 EE

Y el archivo python contiene el siguiente código

import csv ifile = open(''sample.csv'', "rb") read = csv.reader(ifile) for row in read : print (row)

cuando ejecuto el código anterior en python, recibí la siguiente excepción

Archivo "csvformat.py", línea 4, para la fila en lectura: _csv.Error: el iterador debe devolver cadenas, no bytes (¿abriste el archivo en modo texto?)

¿Cómo puedo arreglarlo?


Tu problema es que tienes la b en la bandera open . La bandera rt (lectura, texto) es la predeterminada, por lo tanto, usando el administrador de contexto, simplemente haz esto:

with open(''sample.csv'') as ifile: read = csv.reader(ifile) for row in read: print (row)

El administrador de contexto significa que no necesita manejo genérico de errores (sin el cual puede quedarse atascado con el archivo abierto, especialmente en un intérprete), ya que cerrará automáticamente el archivo en caso de error o al salir del contexto.

Lo anterior es lo mismo que:

with open(''sample.csv'', ''r'') as ifile: ...

o

with open(''sample.csv'', ''rt'') as ifile: ...


Tuve este error al ejecutar un script python antiguo desarrollado con Python 2.6.4

Al actualizar a 3.6.2, tuve que eliminar todos los parámetros ''rb'' de las llamadas abiertas para corregir este error de lectura csv.


Usted abre el archivo en modo de texto.

Más específicamente:

ifile = open(''sample.csv'', "rt", encoding=<theencodingofthefile>)

Las buenas suposiciones para la codificación son "ascii" y "utf8". También puede dejar la codificación desactivada y usará la codificación predeterminada del sistema, que tiende a ser UTF8, pero puede ser otra cosa.