将文件数据从 Azure Blob 存储访问到变量
Posted
技术标签:
【中文标题】将文件数据从 Azure Blob 存储访问到变量【英文标题】:Accessing data of a file from Azure blob storage to a variable 【发布时间】:2019-11-13 10:07:32 【问题描述】:我想从 Azure Blob 存储访问文件的数据到变量。
我正在使用的以下代码将文件数据从 Azure Blob 存储读取到本地文件。我想将它读入一个变量。有可能吗?
from azure.storage.blob import BlockBlobService, PublicAccess
accountName='user123'
accountKey='Pass@12345'
CONTAINER_NAME='development'
blobName='4567/dummyFile.txt'
file_path='C:\\Users\\Sam\\Desktop\\testFile.txt' # local file in which the content from blob will be written
block_blob_service = BlockBlobService(account_name=accountName, account_key=accountKey)
# to access content from azure blob storage to local file
block_blob_service.get_blob_to_path(CONTAINER_NAME,blobName,file_path)
【问题讨论】:
【参考方案1】:Python SDK for Azure Storage
为此提供了 3 个辅助方法:
get_blob_to_stream
:此方法将下载 blob 并将内容存储在 stream
中。如果要使用stream
类型变量,请使用此方法。
get_blob_to_bytes
:此方法将下载 blob 并将内容存储在 byte array
中。如果要使用byte array
类型变量,请使用此方法。
get_blob_to_text
:此方法将下载 blob 并将内容存储在 string
中。如果要使用string
类型变量,请使用此方法。请仅当您知道 blob 内容是字符串时才使用此方法。如果 blob 的内容是二进制的(例如图像文件),请使用其他两种方法。
【讨论】:
谢谢,我使用了以下方法,它起作用了 block_blob_service.get_blob_to_bytes(CONTAINER_NAME,blobName).content block_blob_service.get_blob_to_text(CONTAINER_NAME,blobName).content 只是想知道何时使用字节与文本 更新了我的答案。仅当您知道 blob 的内容是文本时,您才需要使用get_blob_to_text
。如果 blob 的内容是二进制的(比如图像),将其存储为文本将使 blob 无法使用。【参考方案2】:
这适用于 azure-storage-blob 包的 12.8.1 版。新版本似乎不支持 BlockBlobService 类。
from azure.storage.blob import BlobServiceClient # azure-storage-blob 12.8.1
connection_string = " "
local_file_name = "example.txt"
container_name = "example_container"
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
container_client = blob_service_client.get_container_client(container_name)
blob_client = container_client.get_blob_client(local_file_name)
my_blob = blob_client.download_blob().readall() # read blob content as string
print(my_blob)
【讨论】:
以上是关于将文件数据从 Azure Blob 存储访问到变量的主要内容,如果未能解决你的问题,请参考以下文章
将最新的文件夹从 azure blob 存储加载到 azure 数据工厂
何时使用 Azure Blob 存储与 Azure 文件共享?