gpt4 book ai didi

python - Azure Blob 存储 : How can I read a file without having to download the whole thing first?

转载 作者:行者123 更新时间:2023-12-02 06:40:58 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何从 Azure Blob 存储中读取文件。

研究它的文档,我可以看到 download_blob方法似乎是访问 blob 的主要方式。

不过,此方法似乎需要将整个 blob 下载到文件或其他流中。

是否可以从服务中以流的形式逐行读取 Azure Blob 存储中的文件? (并且无需先下载整个内容)

最佳答案

更新0710:

在最新的SDK中azure-storage-blob 12.3.2 ,我们也可以使用 download_blob 来做同样的事情。

download_blob源码截图:

enter image description here

因此,只需提供一个 offsetlength 参数,如下所示(它按照我的测试工作):

blob_client.download_blob(60,100)
<小时/>

原始答案:

您无法逐行读取 blob 文件,但可以按字节读取它们。比如先读取10个字节的数据,接下来可以继续读取接下来的10到20个字节等。

这仅在旧版本 python blob storage sdk 2.1.0 中可用。安装如下:

pip install azure-storage-blob==2.1.0

这里是示例代码(这里我读取了文本,但您可以将其更改为使用 get_blob_to_stream(container_name,blob_name,start_range=0,end_range=10) 方法读取流):

from azure.storage.blob import BlockBlobService, PublicAccess

accountname="xxxx"
accountkey="xxxx"
blob_service_client = BlockBlobService(account_name=accountname,account_key=accountkey)

container_name="test2"
blob_name="a5.txt"

#get the length of the blob file, you can use it if you need a loop in your code to read a blob file.
blob_property = blob_service_client.get_blob_properties(container_name,blob_name)

print("the length of the blob is: " + str(blob_property.properties.content_length) + " bytes")
print("**********")

#get the first 10 bytes data
b1 = blob_service_client.get_blob_to_text(container_name,blob_name,start_range=0,end_range=10)

#you can use the method below to read stream
#blob_service_client.get_blob_to_stream(container_name,blob_name,start_range=0,end_range=10)

print(b1.content)
print("*******")

#get the next range of data
b2=blob_service_client.get_blob_to_text(container_name,blob_name,start_range=10,end_range=50)

print(b2.content)
print("********")

#get the next range of data
b3=blob_service_client.get_blob_to_text(container_name,blob_name,start_range=50,end_range=200)

print(b3.content)

关于python - Azure Blob 存储 : How can I read a file without having to download the whole thing first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62733213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com