2015-07-12 2 views
0

У меня есть файл, который плохо отформатированный, если я пытаюсь открыть его просто open('data.csv', 'r') я получаю:Получение ошибки при использовании сплита()

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in 
    position 4681: character maps to <undefined> 

Так что я использовал open('data.csv', 'rb') вместо и она отлично работает. Затем я попытался передать необходимую информацию в новый файл без успеха с помощью:

with open('datacsv', 'rb') as file, open('new.csv', 'w') as newf: 
    for f in file: 
     newf.write(str(f.split(',')[0:5])) 

Если я снимаю split() он записывает данные в новый файл штрафа, но если добавить раскол, который я использую чтобы извлечь первые несколько столбцов я получаю:

TypeError: 'str' does not support the buffer interface 

Я попытался предложения здесь TypeError: 'str' does not support the buffer interface, но ни один из них не поможет.

Как еще я могу предотвратить повышение TypeError?

+0

Какую версию python вы используете? Можете ли вы попробовать python3, с r, а не rb. – pvg

+0

Это python3, если я обойду без 'rb', файл вообще не откроется. – Leb

+1

Это ваша проблема, а не ошибка типа. Вам нужно выяснить, что такое кодировка файла, а затем передать кодировку открытым, например 'open (filename, encoding =" utf8 ")'. переход на rb просто маскирует вашу проблему с корнем. – pvg

ответ

0

Ваш файл не может декодироваться с использованием кодировки по умолчанию. Вы должны узнать, как файл закодирован, а затем передать эту кодировку как именованный параметр в open. Простой способ проверить кодировку - открыть файл в достойном текстовом редакторе, таком как Notepad ++, Sublime, BBEdit и т. Д. Редактор приложит разумные усилия для обнаружения кодировки.

+0

Я думал, что попробовал 'open ('datacsv', 'r', encoding = 'utf8')', но я предполагаю, что я его не заметил. Это поставило проблему. – Leb

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