首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python从下载文件列表,给定SAS和容器名称?

如何使用Python从下载文件列表,给定SAS和容器名称?
EN

Stack Overflow用户
提问于 2022-06-01 15:16:43
回答 1查看 1.7K关注 0票数 0

我有容器名称及其文件夹结构。我需要使用python代码下载容器中单个文件夹中的所有文件。我还有一个指向这个特定文件夹的SAS URL链接。

我发现的method在线使用BlockBlobService类,它是旧SDK的一部分。我需要找到一种使用当前SDK来实现它的方法。

你能帮帮我吗?

编辑1:

这是我的SAS网址:https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D

编辑2:

添加到找到的方法的链接。

编辑3:

我也有我想下载的文件的完整路径。

EN

Stack Overflow用户

回答已采纳

发布于 2022-06-01 16:04:53

请尝试此代码(但未经测试)。

下面的代码基本上解析了SAS并创建了一个ContainerClient实例。然后,它将列出容器名称中的blobs,其中以文件夹名称开头。一旦你有了这个列表,你就可以下载单个的blobs。

我注意到您的SAS只具有read权限(sp=r)。请注意,您需要readlist权限(sp=rl)。您需要使用这两个权限请求新的SAS URL。

代码语言:javascript
运行
复制
from urllib.parse import urlparse
from azure.storage.blob import ContainerClient

sasUrl = "https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D"

sasUrlParts = urlparse(sasUrl)

accountEndpoint = sasUrlParts.scheme + '://' + sasUrlParts.netloc

sasToken = sasUrlParts.query

pathParts = sasUrlParts.path.split('/')

containerName = pathParts[1]

folderName = pathParts[2]

containerClient = ContainerClient(accountEndpoint, containerName, sasToken)

blobs = containerClient.list_blobs(folderName)

for blob in blobs_list:
  blobClient = containerClient.get_blob_client(blob)
  download the blob here...blobClient.download()

更新

我有上面提到的SAS,以及我想下载的文件的完整路径。例如:路径1:容器/文件夹/file1.csv,路径2:容器/文件夹/file2.txt,等等

请参阅以下代码:

代码语言:javascript
运行
复制
from urllib.parse import urlparse
from azure.storage.blob import BlobClient

sasUrl = "https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D"

blobNameWithContainer = "Container/folder/file1.csv"

sasUrlParts = urlparse(sasUrl)

accountEndpoint = sasUrlParts.scheme + '://' + sasUrlParts.netloc

sasToken = sasUrlParts.query

blobSasUrl = accountEndpoint + '/' + blobNameWithContainer + '?' + sasToken;

blobClient = BlobClient.from_blob_url(blobSasUrl);
.... now do any operation on that blob ...
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72464304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档