#python #python-3.x #numpy #load #pickle
#python #python-3.x #numpy #загрузить #рассол
Вопрос:
Я использую python 3.x и я хочу запустить приведенный ниже код:
import cPickle
x = cPickle.load(open('s01.dat', 'rb'))
Это работает очень хорошо в python 2.x, но когда я пытаюсь в python 3, я получаю эту ошибку:
Ошибка ModuleNotFoundError: нет модуля с именем ‘cPickle’
Я решил это с помощью какого-либо другого сообщения в StackOverflow и изменил свой код на :
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb'))
И я получаю эту ошибку:
Ошибка UnicodeDecodeError: кодек «ascii» не может декодировать байт 0x9a в позиции 8: порядковый номер не в диапазоне (128)
Я пытаюсь решить это, изменив кодировку следующим образом:
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='iso-8859-1'))
или
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='utf-8'))
но все равно я получаю эту ошибку:
Ошибка значения: двоичный режим не принимает аргумент encoding
Мой файл *.dat содержит два массива, и я ожидаю их импортировать! Как я мог бы преодолеть эти проблемы?
Комментарии:
1. @101arrowz да, я пробовал это, и я получил ошибку> TypeError: требуется байтоподобный объект, а не ошибка ‘str’!
2. @101arrowz На самом деле, я хочу загрузить набор данных, и у меня недостаточно информации об этом! некоторые описания доступны по этой ссылке: ( eecs.qmul.ac.uk/mmv/datasets/deap/readme.html#prep )
3. Файлы представляют собой маринованные форматы python / numpy
Ответ №1:
Моя проблема решается с помощью ответа @Macattack, как показано ниже:
import pickle
x = pickle.load(open('s07.dat', 'rb'), encoding='iso-8859-1')
Ответ №2:
Во-первых, если вы пытаетесь использовать pickle
в python3, просто сделайте import pickle
(он использует скомпилированный cPickle, когда он доступен) или from six.moves import cPickle
, если вам нужна совместимость с python2.
Во-вторых, нужный вам вариант кодирования — это тот, который отправляется pickle.load
не на open
. Попробуйте:
x = cPickle.load(open('s07.dat', 'rb'), encoding='utf-8')