WedX - журнал о программировании и компьютерных науках

Как правильно сохранить файл, чтобы избежать UnicodeDecodeError

У меня есть большой набор данных, который выдает UnicodeDecodeError при попытке использовать набор данных.

У меня есть big_file_format_x и я хочу отформатировать его в big_file_format_y вот так:

with open(PATH, "r") as data:
    for index, line in enumerate(data.readlines()):
        // Formatting logic

with open(SAVE_PATH, "w") as new_data:
    new_data.write(formated_data_string)

Затем я разбиваю отформатированный набор данных на 3 набора данных:

with open(PATH, "rb") as data:
    for line in data.readlines():
        // Do splitting logic

with open('train_data.txt', 'wb') as file:
    file.write(train_data)

with open('vali_data.txt', 'wb') as file:
    file.write(vali_data)

with open('test_data.txt', 'wb') as file:
    file.write(test_data)

Теперь, когда я хочу обработать наборы данных, которые я получаю

    kwargs[name] = annotation.from_params(params=subparams, **subextras)
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/common/from_params.py", line 274, in from_params
    return subclass.from_params(params=params, **extras)
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/text_field_embedders/basic_text_field_embedder.py", line 136, in from_params
    for name, subparams in token_embedder_params.items()
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/text_field_embedders/basic_text_field_embedder.py", line 136, in <dictcomp>
    for name, subparams in token_embedder_params.items()
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/common/from_params.py", line 274, in from_params
    return subclass.from_params(params=params, **extras)
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/token_embedders/embedding.py", line 200, in from_params
    vocab_namespace)
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/token_embedders/embedding.py", line 270, in _read_pretrained_embeddings_file
    vocab, namespace)
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/token_embedders/embedding.py", line 293, in _read_embeddings_from_text_file
    with EmbeddingsTextFile(file_uri) as embeddings_file:
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/site-packages/allennlp/modules/token_embedders/embedding.py", line 450, in __init__
    first_line = next(self._handle)     # this moves the iterator forward
  File "/home/public/s1234/.conda/envs/allennlp/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 0: invalid start byte

Как я могу избежать этой ошибки?

22.06.2019

Ответы:


1

определение кодировки должно решить эту проблему:

open(PATH, "r", encoding="UTF-8") # replace UTF-8 with the encoding of your file

при сохранении файла вы также должны определить кодировку. В противном случае используется кодировка по умолчанию для вашей среды: кодировка по умолчанию python 3.0 open()

22.06.2019
  • Все еще бросает исключение :( 22.06.2019
  • Попробуем выделить ошибку: ошибка возникает при чтении или записи? 22.06.2019
  • Фактическое форматирование и разделение данных работает просто отлично. Набор данных считывается читателем для обучения некоторой модели nlp. Таким образом, ошибка возникает при чтении этих данных. 22.06.2019
  • Ok. Давайте попробуем другие кодировки: Можете ли вы проверить utf-8-sig и cp1252? 22.06.2019
  • Спасибо за помощь Рафаэлю, это очень ценно! Я немного отсутствую, но я проверю позже. Должен ли я пытаться читать или писать файлы? Мне все еще не хватает понимания того, как все обстоит, когда закодировано в python.. 22.06.2019
  • без проблем. Попробуйте сначала прочитать. Выделение проблемы имеет решающее значение при отладке. Создайте небольшой скрипт, который ничего не делает, кроме чтения вашего входного файла. Если этот шаг работает, вы можете продолжить обработку и, наконец, написать. Кодировка определяет, как текст сохраняется в двоичных файлах. Знание кодировки ваших файлов имеет решающее значение. Как правило: всегда указывайте кодировку. 22.06.2019
  • Эй, я узнал, в чем проблема. Некоторые другие параметры в моей модели также нуждались в некоторых данных. Таким образом, проблема с кодировкой была не в моем наборе данных, а в этих других данных ... Я трачу 10 часов на кодирование своего файла, пока не увидел в трассировке стека, что он (четко) говорит, что проблема заключается во встраивании ... иногда нужно быть глупым , я думаю, это часть работы. Спасибо Рафа!! 23.06.2019
  • привет Марсель, ха-ха здорово. прекрасно это знаю :) 23.06.2019

  • 2

    У вас может быть другая кодировка в этом файле, чем utf-8. 0xba — это символ º в кодировке ISO-8869-1.

    Пытаться

    data.encode ("utf-8")
    
    22.06.2019
  • Кажется, вы сейчас пытаетесь использовать w-режим. Если вы используете «wb», вам понадобятся байты, если «w», вам понадобится str. data.encode(utf-8) предназначен для операций записи в режимах wb. 22.06.2019
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]