Saltar al contenido

Lectura de un archivo CSV UTF8 con Python

No dudes en compartir nuestros post y códigos con tus amigos, necesitamos de tu ayuda para ampliar nuestra comunidad.

Solución:

los .encode el método se aplica a un Unicode string para hacer un byte-string; pero lo estás llamando en un byte-string en cambio… ¡al revés! mira el codecs módulo en la biblioteca estándar y codecs.open en particular para mejores soluciones generales para leer archivos de texto codificados en UTF-8. Sin embargo, para el csv módulo en particular, necesita pasar datos utf-8, y eso es lo que ya está obteniendo, por lo que su código puede ser mucho más simple:

import csv

def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
    csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
    for row in csv_reader:
        yield [unicode(cell, 'utf-8') for cell in row]

filename = 'da.csv'
reader = unicode_csv_reader(open(filename))
for field1, field2, field3 in reader:
  print field1, field2, field3 

PD: si resulta que sus datos de entrada NO están en utf-8, pero, por ejemplo, en ISO-8859-1, entonces necesita una “transcodificación” (si está interesado en usar utf-8 en el csv nivel de módulo), de la forma line.decode('whateverweirdcodec').encode('utf-8') — pero probablemente pueda usar el nombre de su codificación existente en el yield línea en mi código anterior, en lugar de 'utf-8'como csv en realidad va a estar bien con cadenas de bytes codificadas ISO-8859-*.

Pitón 2.X

Hay una biblioteca unicode-csv que debería resolver sus problemas, con el beneficio adicional de no tener que navegar para escribir ningún código nuevo relacionado con csv.

Aquí hay un ejemplo de su archivo Léame:

>>> import unicodecsv
>>> from cStringIO import StringIO
>>> f = StringIO()
>>> w = unicodecsv.writer(f, encoding='utf-8')
>>> w.writerow((u'é', u'ñ'))
>>> f.seek(0)
>>> r = unicodecsv.reader(f, encoding='utf-8')
>>> row = r.next()
>>> print row[0], row[1]
é ñ

Pitón 3.X

En python 3, esto es compatible de forma inmediata con la función incorporada csv módulo. Mira este ejemplo:

import csv
with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

Si desea leer un archivo CSV con codificación utf-8, un enfoque minimalista que le recomiendo es usar algo como esto:

with open(file_name, encoding="utf8") as csv_file:

Con esa declaración, puede usar más tarde un lector de CSV para trabajar.

Sección de Reseñas y Valoraciones

Finalizando este artículo puedes encontrar las explicaciones de otros sys admins, tú aún eres capaz insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *