Python ver. 3.6.1
matplotlib ver. 2.0.2
numpy ver. 1.13.0rc1
Пример из документации к matplotlib 2.0.2:
import matplotlib.mlab as mplab import numpy as np r = mplab.csv2rec('somefile.csv', checkrows=0) formatd = dict( weight = mplab.FormatFloat(2), change = mplab.FormatPercent(2), cost = mplab.FormatThousands(2), ) mplab.rec2csv(r, 'test.csv', formatd=formatd)
Содержимое файла somefile.csv
weight,change,cost
2100,2200,2300
31000,32000,33000
Ошибка:
Traceback (most recent call last):
File “C:\Python36\Work\444rrr.py”, line 9, in <module>
mplab.rec2csv(r, ‘test.csv’, formatd=formatd)
File “C:\Python36\lib\site-packages\matplotlib\mlab.py”, line 3283, in rec2csv
writer.writerow(header)
TypeError: a bytes-like object is required, not ‘str’
Замечание: Если открывать файл как текстовый, то все внешне нормально.
Но попытка прочитать файл test.csv (заменяем somefile.csv на test.csv) проваливается из-за ошибки.
Ошибка возникает, как я понимаю, из-за того, что при сохранении файла как текстового, в конец строк добавляются символы CRLF (файл текстовый и вроде так должно быть с CSV файлами). К сожалению в конце записанных строк находится другая комбинация - CR CRLF.
Аналогичная картина и с модулем CSV.
Возможно, что надо писать байт подобный объект, но как тогда преобразовать массив в такой объект?
Тип массива numpy.recarray.
Вопрос:
Есть ли у кого рабочий пример с функциями rec2csv() и csv2rec() или кто подскажет, как избавиться от такого рода ошибки?
Моя задача учебная - массивы записей (NumPy), чтение / запись CSV-файлов