-13

Python - ...

Здравствуйте.

Есть тут кто-то кто в питоне (2.7) немного понимает? Как в этом странном языке записать в файл массив байтов? А потом прочитать заданное количество байт? Я не питонист, но надо сделать небольшую программу для управления устройством.


Почему это так сложно? В добром дотнете проcто File.WriteAllBytes() и поехали дальше, а здесь какие-то бессмысленные конструкции и ничего в итоге.  "Type error: must be string or buffer, not list" что за буфер, где взять?

Кучу времени уже потерял.


Строку записать легко и есть есть много примеров, а байты все старательно обходят, видимо мало кто знает как это сделать.

Дубликаты не найдены

+3

обычно подобное куда продуктивнее на проф форумах спрашивать.

раскрыть ветку 4
0

воот! наконец здравое мнение

раскрыть ветку 3
-2

Да тут сразу ответ пишут (всем спасибо большое), а там можно долго ждать.

раскрыть ветку 2
+1
Открывать файл с модификаторами не w и r, а wb и rb, тогда операции с файлами производятся в двоичной форме. Пример f = open ("testFile.txt", "rb")
раскрыть ветку 15
0

Наверно вы сами не пробовали? Я так и пытался.

раскрыть ветку 14
0
Накидал скрипт за минуту, всё работает. Ошибка где то раньше, нужен весь код функции.
раскрыть ветку 13
0

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

http://www.cyberforum.ru/python/

раскрыть ветку 2
0

Не проще. Тут люди адекватнее в основном. Мне тут уже помогли, а на профильных форумах долго ждать ответ и слишком много снобов, которые туда заходят, чтобы новичков носом тыкать.

раскрыть ветку 1
0

ни разу не тыкали. там как раз сидят люди знающие. а раздел для начинающих и создан для "глупых" вопросов от тех кто начинает только что-то програмить. но хозяин- барин. я пользуюсь кибером и мне удобно. тебе не удобно - не пользуйся.

0

Не Ваш случай?


newFileByteArray = bytearray(newFileBytes)

newFile.write(newFileByteArray)


https://stackoverflow.com/questions/18367007/python-how-to-write-to-a-binary-file

https://docs.python.org/3.3/library/functions.html#bytearray

bytearray was added in 2.6

0

В "добром" дотенете плейсхолдеры, вебэлементы и прочий ад за который нужно было на кол

0

Питон прост. Очень прост. И записывать в файл умеет только "string or buffer". А список не умеет. Как и "C" какой-нить.


open("filename.txt", "wb").write("".join(list_of_bytes))


Наверное, как-то так.

раскрыть ветку 4
0

к сожалению нет:


byte=[27,64]

......

prnDev.write("".join(byte))

TypeError: sequence item 0: expected string, int found



к строке числа не join'ятся

раскрыть ветку 3
+1
Вот тут есть небольшое описание, может вам поможет: https://webkul.com/blog/using-io-for-creating-file-object/
0

Ну, вообще-то, byte=[27,64] это список не байт, а чисел.


В таком случе, как советовали, надо использовать bytearray:

prnDev.write(bytearray(byte))

0

Вариант-костыль: Int = 2 байта = 2 символа ASCII. Переконвертируете и пишете как String в файл. Главное - со старшинством байт не накосячить.

0

Мать вашу, вы сводите с ума мозг гуманитария

0
Лучше использовать не list , а pickle . Тогда все без проблем пишет
раскрыть ветку 2
+1

pikle сохраняет объекты, как я понял. Мне надо предать устройству несколько байтов - это разные команды и количество байтов может быть очень разное. Писать их в цикле по одному как отдельные объекты? А pickle туда от себя ничего не добавит?

0

Сейчас попробовал сохранить байты в pickle в реальный файл, а не в устройство и посмотреть. Pickle туда напихал меток от себя. Поэтому не вариант.

0

Не разбираюсь в питоне, но (дальше просто моё ИМХО) судя по сообщению об ошибке, компилятор воспринимает Ваши байты не как массив, а как последовательность. Следовательно, Вам нужно добавить адресацию байтов в массиве, или хотя бы обозначить его конечность. Попробуйте поиграть со шрифтами с типами данных.

-1

json может быть?

Похожие посты
Похожие посты не найдены. Возможно, вас заинтересуют другие посты по тегам: