Попытка вырезать b '' из моего массива Numpy

Поэтому у меня то, что я чувствую, очень глупые проблемы.

Я создаю массив из файла:

A1=np.loadtxt(file, dtype='a100') 

Я хочу написать этот массив после его обработки в другой файл:

 np.savetxt("Test.txt", A1, fmt=%s, delimiter=',') 

Почему он пишет b'string? Кажется, я понимаю, что он записывает его как байт, но для жизни меня не могу понять, как записать его без буквы b ''.

Я знаю, что это, наверное, что-то невероятно простое, я спускаюсь!

One Solution collect form web for “Попытка вырезать b '' из моего массива Numpy”

A1 загружается как массив байтов. Python3 использовал unicode строки по умолчанию, поэтому обычно добавляет их с помощью «b». Это нормально с print . Я немного удивлен, что это так и во время записи файла.

В любом случае, похоже, это трюк:

 A2=np.array([x.decode() for x in A1]) np.savetxt("Test.txt", A2, fmt='%s', delimiter=',') 

A2 будет иметь dtype, например dtype='<U100' .


Мой тестовый массив:

 array([b'one.com', b'two.url', b'three.four'], dtype='|S10') 

загруженный из простого текстового файла:

 one.com two.url three.four 

.decode – это строковый метод. [x.decode() for x in A1] работает для простого 1-го массива байтов. Если A1 равно 2d, итерация должна выполняться по всем элементам, а не только по строкам. А если A1 – структурированный массив, то он должен применяться к строкам внутри элементов.


Другая возможность заключается в использовании конвертера во время загрузки, поэтому вы получаете массив строк (unicode)

 In [508]: A1=np.loadtxt('urls.txt', dtype='U', converters={0:lambda x:x.decode()}) In [509]: A1 Out[509]: array(['one.com', 'two.url', 'three.four'], dtype='<U10') In [510]: np.savetxt('test0.txt',A1,fmt='%s') In [511]: cat test0.txt one.com two.url three.four 

В lib, который содержит loadtxt есть несколько функций конвертера, asbytes , asbytes_nested и asstr . Таким образом, converters также могут быть: converters={0:np.lib.npyio.asstr} .

genfromtxt обрабатывает это без converters :

  A1=np.genfromtxt('urls.txt', dtype='U') # array(['one.com', 'two.url', 'three.four'], dtype='<U10') 

Чтобы понять, почему savetxt сохраняет строки unicode, как мы хотим, но добавляет b для байтов, мы должны посмотреть на его код.

np.savetxt (работает на py3) по существу:

 fh = open(fname, 'wb') X = np.atleast_2d(X).T # make a 'fmt' that matches the columns of X (with delimiters) for row in X: fh.write(asbytes(format % tuple(row) + newline)) 

Глядя на две строки выборки (str и bytestr):

 In [617]: asbytes('%s'%tuple(['one.two'])) Out[617]: b'one.two' In [618]: asbytes('%s'%tuple([b'one.two'])) Out[618]: b"b'one.two'" 

Запись в файл 'wb' удаляет этот внешний слой из b'' , оставляя внутренний для байтовой строки. Это также объясняет, почему строки («plain» py3 unicode) записываются как «latin1» в файл.


Вы можете написать массив bytestrings напрямую, без savetxt . Например:

 A0 = array([b'one.com', b'two.url', b'three.four'], dtype='|S10') with open('test0.txt','wb') as f: for x in A0: f.write(x+b'\n') cat test0.txt one.com two.url three.four 

Строки Unicode также могут быть записаны напрямую, создавая один и тот же файл:

 A1 = array(['one.com', 'two.url', 'three.four'], dtype='<U10') with open('test1.txt','w') as f: for x in A1: f.write(x+'\n') 

Кодировка по умолчанию для такого файла encoding='UTF-8' , то же самое, что используется с 'one.com'.encode() . Эффект такой же, как и у savetxt :

 with open('test1.txt','wb') as f: for x in A1: f.write(x.encode()+b'\n') 

np.char есть .encode и .decode , которые, как представляется, работают итеративно на элементах массива.

таким образом

  np.char.decode(A1) # convert |S10 to <U10, like [x.decode() for x in A1] np.char.encode(A1) # convert <U10 to |S10 

Это работает с многомерными массивами

  np.savetxt('testm.txt',np.char.decode(A_bytes[:,None][:,[0,0]]), fmt='%s',delimiter=', ') 

С помощью структурированного массива np.char.decode должен применяться индивидуально к каждому из полей char.

  • Сохранение загруженных данных base64 дает TypeError: необходим байтовый объект, а не 'str'
  • Запуск Python столкнулся с a. Не удалось получить проект для запуска
  • Есть ли разница между и при копировании списка?
  • python - загрузка сюжета из памяти в s3 с использованием matplotlib и boto
  • Запуск нескольких версий uwsgi python
  • Советы по обновлению до python 3.0?
  • В Python, как утверждать, что переданный файловый объект был открыт с помощью newline = ''?
  • gtk3 + и python rgba конвертировать в hex
  •  
    Interesting Posts for Van-Lav

    Создание таблиц качества публикации в python

    Почему администратор admin.autodiscover () не запускается автоматически в Django при использовании администратора, почему он был спроектирован так, чтобы его вызывали явно?

    Являются ли подходящие базовые классы хорошей практикой? (Python / webapp2)

    Pretty JSON Форматирование в IPython Notebook

    numpy: ravel_multi_index увеличивает разные результаты от итерации по циклу индексов

    Как мне связать статическое изображение внутри файла css?

    Как написать тесты для форм в Django?

    Найти дубликаты элементов в списке

    Как реализовать безопасную проверку подлинности с помощью xml-rpc в python?

    DroneKit: Не удалось подключиться к /dev/tty.usbmodem1411: у объекта «Serial» нет атрибута «setBaudrate»

    Keras Custom Metric для точности одного класса

    django очень медленный на моей машине

    Как определить, запущен ли скрипт python в качестве фонового процесса

    Замена NaT на Эпоху в Пандах

    ошибка индексации в списке в python

    Python - лучший язык программирования в мире.