Преобразовать байтовый массив Java в байтовый массив Python - PullRequest
1 голос
/ 23 февраля 2011

Я знаю, что если я пойму это или кто-то покажет мне, это будет удар по лбу.Прежде чем отправлять какие-либо вопросы, я стараюсь, по крайней мере, три часа и довольно долго искать.Есть несколько подсказок, которые близки, но, похоже, ничего из того, что я принял / попробовал, не работает.

Я беру байт [] из Java и передаю его через JSON (с Gson) в Python JSON с помощью Flask.Этот byte [] сохраняется в объекте python в виде целочисленного списка при получении, но теперь мне нужно отправить его в MySQLdb и сохранить в виде большого двоичного объекта.Содержимое данных - это двоичные данные файла.

Как преобразовать список целых чисел python [1,2, -3, -143 ....] во что-то, что я могу сохранить в MySQL?Я пробовал bytearray () и array.array (), но они задыхаются, когда я получаю доступ к списку непосредственно из объекта и пытаюсь преобразовать его в строку для хранения данных MySQLdb.

Любые ссылки или подсказки приветствуются.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2011

Вы можете присоединить его к строке байтов (просто строка в Python 2.x). Самый простой, если не самый эффективный способ - просто изменить данные, а затем преобразовать их в символы и объединить. Что-то вроде:

data = [1,2,-3,-143, ...]
binData = ''.join(map(lambda x: chr(x % 256), data))

binData = ''.join(map(lambda x: chr(x % 256), attach.attcoll))
    sql_stmt = """INSERT INTO attachments (attno,filename,fileextension,projNo,procNo,wpattachment) \
    VALUES ('%s','%s','%s','%s','%s','%s') ON DUPLICATE KEY UPDATE filename='%s',fileextension='%s'""" % (attach.attno,\
    attach.filename,attach.fileextension,attach.projNo,attach.procNo,binData,attach.filename,attach.fileextension)

    try:
        cursor.execute(sql_stmt)
        conn.commit()
        cursor.close()
        conn.close()
        return 'SUCCESS'
    except MySQLdb.Error:
        cursor.close()
        conn.close()
        print "My SQL cursor execute error."
        return 'FAILURE'
0 голосов
/ 13 декабря 2017
data = [1,2,-3,-143, ...]
binData = bytearray([x % 256 for x in data])
0 голосов
/ 02 июля 2015

Я обнаружил, что ''.join(map(lambda x: chr(x % 256), data)) мучительно медленно (~ 4 минуты) для моих данных на Python 2.7.9, где небольшое изменение str(bytearray(map(lambda x: chr(x % 256), data))) заняло всего около 10 секунд.

...