2014-11-30 4 views
6

Я хочу прочитать файл csv и обработать некоторые столбцы, но я продолжаю получать проблемы. Застрял со следующей ошибкой:'utf-8' codec не может декодировать байт 0x89

Traceback (most recent call last): 
    File "C:\Users\Sven\Desktop\Python\read csv.py", line 5, in <module> 
    for row in reader: 
    File "C:\Python34\lib\codecs.py", line 313, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 446: invalid start byte 
>>> 

Мой код

import csv 
with open("c:\\Users\\Sven\\Desktop\\relaties 24112014.csv",newline='', encoding="utf8") as f: 
    reader = csv.reader(f,delimiter=';',quotechar='|') 
    #print(sum(1 for row in reader)) 
    for row in reader: 
     print(row) 
     if row: 
      value = row[6] 
      value = value.replace('(', '') 
      value = value.replace(')', '') 
      value = value.replace(' ', '') 
      value = value.replace('.', '') 
      value = value.replace('0032', '0') 
      if len(value) > 0: 
       print(value + ' Length: ' + str(len(value))) 

Я новичок в Python, пытался прибегая к помощи, но трудно найти правильное решение.

Может ли кто-нибудь помочь мне?

+1

вы можете использовать файл CSV файла или его часть? – user1767754

+5

Вы уверены, что ваш файл * действительно * закодирован с помощью UTF-8? Попробуйте '' cp1252'', если файл поступает из Excel в западной стране. Все поддерживаемые кодировки: https://docs.python.org/2/library/codecs.html#standard-encodings –

+1

Почему вы открываете файл как UTF-8? Вы уверены, что это правильный кодек для этого файла? –

ответ

3

Это самая важная подсказка:

invalid start byte

\x89 не так, как это было предложено в комментариях, недопустимый UTF-8 байт. Это вполне допустимо продолжение байт. Значение, если это следует правильное значение байт, то это коды UTF-8 правильно:

http://hexutf8.com/?q=0xc90x89

Так что либо вы (1) не имеют UTF-8 данные, как вы ожидаете, или (2) у вас есть некоторые уродливы UTF-8. Кодек Python просто дает вам знать, что он встретил \x89 в неправильном порядке в последовательности.

(Подробнее о продолжении байт здесь: http://en.wikipedia.org/wiki/UTF-8#Codepage_layout)

+0

Что бы вы посоветовали диагностировать, что нужно делать дальше? – ScottieB

Смежные вопросы