‘utf-8’ codec no puede decodificar byte 0xa0 en posición 4276: no válido inicio de bytes

Trato de leer e imprimir el siguiente archivo: txt.tsv (https://www.sec.gov/files/dera/data/financial-statement-and-notes-data-sets/2017q3_notes.zip)

De acuerdo a la SEC el conjunto de datos se proporciona en una única codificación, de la siguiente manera:

De Texto Delimitado Por Valor De (.txt): utf-8, delimitado por tabulaciones, \n – terminado líneas, con la primera línea contiene los nombres de campo en minúsculas.

Mi código actual:

import csv

with open('txt.tsv') as tsvfile:
    reader = csv.DictReader(tsvfile, dialect='excel-tab')
    for row in reader:
        print(row)

Todos los intentos terminaron con el siguiente mensaje de error:

‘utf-8’ codec no puede decodificar byte 0xa0 en posición 4276: no válido inicio byte

Estoy un poco perdido. Alguien me puede ayudar? Muchas gracias de antemano.

  • Podemos ver el archivo que está utilizando?
  • También, es esta Python 2 o 3? La respuesta es muy importante, ya que el csv módulo es roto por la no-ASCII en Python 2.
  • Estoy usando Python 3.6.0
  • Hmm… En la relectura de el error, estoy bastante seguro de que el problema es el archivo de entrada. El error indica que está tratando de leer como utf-8, por lo que su entrada probable que no siga el formato que se describe. Dicho esto, el archivo vinculado parece seguir igual de bien (es ASCII puro AFAICT; utiliza un poco de control ASCII, caracteres, pero que todos están en el rango ASCII), por lo que no estoy seguro de dónde había un \xa0 byte. Es posible modificar el archivo por accidente antes de usarla?
  • vea a continuación la respuesta de Kopytok. si puedo cambiar la codificación a «windows-1252′ funciona perfecto.
  • De un lado-nota: Usted debe estar pasando newline='' a open cuando se trabaja con CSV-como cosas. Y el excel_tab dialecto está mal aquí; se asume que los finales de línea se \r\n, cuando el archivo es \n terminaciones. La definición de su propio dialecto basado en excel_tab sería una solución fácil, sólo subclase y la clase de la variable de nivel de lineterminator = '\n'

InformationsquelleAutor Vital | 2018-01-02

4 Kommentare

  1. 15

    De codificación en el archivo «windows-1252′. Uso:

    open('txt.tsv', encoding='windows-1252')
    • Muchas gracias!! Que funciona! ¿Puedo preguntar por qué funciona con «windows-1252» a pesar de la SEC de los estados es ‘utf-8’?
    • Son usted seguro de que es cp1252? El archivo que he descargado parecía ser ASCII. Si no es UTF-8, y no ASCII, podría ser, literalmente, cualquier byte por carácter ASCII superconjunto y usted sería capaz de adivinar en la codificación de forma heurística (iba a decodificar correctamente en cualquiera de ellos, pero los resultados podrían ser de basura).
    • Mejor pedir SEC
    • codificación detector detecta cp-1252 y el resultado parece ser de fiar
    • Esto tiene el potencial de producir resultados no válidos. CP-1252 estará feliz de decodificar algo (datos de audio, volcados de núcleo, archivos zip) y pretender que todo el texto válido.
    • Inspección Casual de mi descarga de txt.tsv indica que no hay 0xa0 carácter en el desplazamiento indicado en la pregunta, pero un montón de 0xa0 personajes que aparentemente representa duro espacios, y 0xac caracteres en una posición que indica una moneda indicador así como 0xae que al parecer es el símbolo®. Este es casi en consonancia con CP1252 o ISO-8859-1 (que por supuesto son muy similares), pero la 0xac no encaja con cualquiera. Tal vez ver también cdn.rawgit.com/tripleee/8bit/master/encodings.html#ac (tos.)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...