将Java字节数组转换为Python字节数组
我知道,如果我找出这一个或者有人向我展示,它将成为额头sla子手。在发布任何问题之前,我会尝试至少三个小时并进行相当多的搜索。有几个提示很接近,但我没有采用/尝试过的东西似乎工作。将Java字节数组转换为Python字节数组
我正在从Java获取一个byte [],并通过JSON(使用Gson)将它传递给使用Flask的python JSON。这个byte []在收到时作为一个整数列表存储在一个python对象中,但是现在我需要将它发送到MySQLdb并将它作为一个blob存储。数据内容是二进制文件数据。
如何将python整数列表[1,2,-3,-143 ....]转换为我可以在MySQL中存储的东西?我尝试过bytearray()和array.array(),但是当我直接从对象访问列表时尝试转换为字符串来存储MySQLdb。
任何链接或提示,非常感谢。
你可以将它加入到一个字节串(只是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'
我发现''.join(map(lambda x: chr(x % 256), data))
是痛苦的缓慢(约4分钟)我的蟒蛇2.7.9,其中一个小的改变str(bytearray(map(lambda x: chr(x % 256), data)))
只用了10秒左右的数据。
data = [1,2,-3,-143, ...]
binData = bytearray([x % 256 for x in data])
请提供一些解释以配合您的代码。 – Trent 2017-12-13 06:47:09
这真棒,比我想象的更容易。任何想法如何将其纳入MySQL? – kirtcathey 2011-02-24 09:54:24
@kirtcathey我几乎没有使用过MySQL,从来没有从Python,所以不幸没有。 – cobbal 2011-02-24 09:57:26