簡體   English   中英

從 Azure 表存儲中提取字節值

[英]Extracting Byte values from Azure Table Storage

我正在編寫一個 python 腳本來從 Azure 表存儲中查詢數據。

我要提取的數據是二進制類型(信息被序列化並存儲)

當我使用entity['BodyChunk01]運行代碼時,我將值返回為

'BodyChunk01': <azure.data.tables._entity.EntityProperty object at 0x0DDFFB10>

(欄目名稱為 BodyChunk01)

當我使用stackoverflow上另一個問題中提到的entity['BodyChunk01'].value時,它返回反序列化的 json 數據,但我想要存儲的實際序列化值,如下面的屏幕截圖所示

樣本字節數據

我相信你想要完成的事情是不可能的。 here查找了 SDK 代碼,似乎 SDK 正在根據here的代碼強制進行轉換。

def _decode_base64_to_bytes(data):
    if isinstance(data, six.text_type):
        data = data.encode("utf-8")
    return base64.b64decode(data)

您可能想在這里提出一個問題: https://github.com/Azure/azure-sdk-for-python/issues並將其提交給 SDK 團隊的注意。

二進制數據被轉換為“Base64 編碼字符串”,然后保存。 您需要做的是進行 Base64 解碼以獲取字節數組。

我不太熟悉 Python 但你可以這樣做:

 import base64 decodedBytes = base64.b64decode(entity['BodyChunk01'].value) decodedStr = str(decodedBytes, "utf-8")

如果您想要原始格式的實體,您可以包含 header 以不返回 OData 類型,這將通過反序列化。 Ints、float、boolean 被轉換為它們各自的類型,但二進制實體屬性將作為原始字符串返回。 這是一個代碼片段:

headers = {'Accept': 'application/json;odata=nometadata'}

received_entity = table_client.get_entity(
    row_key=entity['RowKey'],
    partition_key=entity['PartitionKey'],
    headers=headers
)

print(received_entity['BodyChunk01'])

免責聲明:我在 Azure SDK 為 Python 團隊工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM