2016-03-10 2 views
0

Я получил UnicodeDecodeError, когда я зациклирую строку в файле.UnicodeDecodeError файл синтаксиса для цикла for python3

with open(somefile,'r') as f: 
    for line in f: 
     #do something 

Это происходит, когда я использую python 3.4. В общем, у меня есть файлы, в которых нет символов UTF-8. Я хочу проанализировать файл строки за строкой и найти строку, где проблема apper и получить точный индекс в строке, где такие не utf-8 появляются. У меня есть готовый код для него, но он работает uner python 2.7.9, но под python 3.4 я получил UnicodeDecodeError, когда цикл for выполняется. Любые идеи ???

+0

'для ind, строка в перечислении (f, 1): print (ind)' даст вам номер строки –

ответ

1

Вам необходимо открыть файл в двоичном режиме и декодировать строки по одному. Попробуйте это:

with open('badutf.txt', 'rb') as f: 
    for i, line in enumerate(f,1): 
     try: 
      line.decode('utf-8') 
     except UnicodeDecodeError as e: 
      print ('Line: {}, Offset: {}, {}'.format(i, e.start, e.reason)) 

Вот результат я получаю в Python3:

Line: 16, Offset: 6, invalid start byte 

Конечно, строка 16, позиция 6 является плохими байтами.

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