2011-02-23 184 views
1

我知道,如果我找出這一個或者有人向我展示,它將成爲額頭sla子手。在發佈任何問題之前,我會嘗試至少三個小時並進行相當多的搜索。有幾個提示很接近,但我沒有采用/嘗試過的東西似乎工作。將Java字節數組轉換爲Python字節數組

我正在從Java獲取一個byte [],並通過JSON(使用Gson)將它傳遞給使用Flask的python JSON。這個byte []在收到時作爲一個整數列表存儲在一個python對象中,但是現在我需要將它發送到MySQLdb並將它作爲一個blob存儲。數據內容是二進制文件數據。

如何將python整數列表[1,2,-3,-143 ....]轉換爲我可以在MySQL中存儲的東西?我嘗試過bytearray()和array.array(),但是當我直接從對象訪問列表時嘗試轉換爲字符串來存儲MySQLdb。

任何鏈接或提示,非常感謝。

回答

4

你可以將它加入到一個字節串(只是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

這真棒,比我想象的更容易。任何想法如何將其納入MySQL? – kirtcathey 2011-02-24 09:54:24

+0

@kirtcathey我幾乎沒有使用過MySQL,從來沒有從Python,所以不幸沒有。 – cobbal 2011-02-24 09:57:26

0

我發現''.join(map(lambda x: chr(x % 256), data))是痛苦的緩慢(約4分鐘)我的蟒蛇2.7.9,其中一個小的改變str(bytearray(map(lambda x: chr(x % 256), data)))只用了10秒左右的數據。

0
data = [1,2,-3,-143, ...] 
binData = bytearray([x % 256 for x in data]) 
+6

請提供一些解釋以配合您的代碼。 – Trent 2017-12-13 06:47:09