从Blob下载文件

时间:2019-05-10 22:01:07

标签: python-2.7 azure-cli

我正在尝试从azure存储blob下载文件。我正在错误以下。我正在使用python 2.7.5和azure-cli:2.0.64。但是当我使用sudo时,它的工作正常。有人可以帮我解决这个问题吗? 在此先感谢!!

无法导入名称“ AzureException”

2 个答案:

答案 0 :(得分:0)

我正在添加示例代码以遍历容器和文件夹结构,并最终下载blob文件

from azure.storage.blob import BlockBlobService
from azure.storage.blob import PublicAccess
import os

#name of your storage account and the access key from Settings->AccessKeys->key1
block_blob_service = BlockBlobService(account_name='storageaccountname', account_key='AccountKey')

#name of the container
generator = block_blob_service.list_blobs('testcontainer')

#code below lists all the blobs in the container and downloads them one after another
for blob in generator:
    print(blob.name)
    print("{}".format(blob.name))
    #check if the path contains a folder structure, create the folder structure
    if "/" in "{}".format(blob.name):
        print("there is a path in this")
        #extract the folder path and check if that folder exists locally, and if not create it
        head, tail = os.path.split("{}".format(blob.name))
        print(head)
        print(tail)
        if (os.path.isdir(os.getcwd()+ "/" + head)):
            #download the files to this directory
            print("directory and sub directories exist")
            block_blob_service.get_blob_to_path('testcontainer',blob.name,os.getcwd()+ "/" + head + "/" + tail)
        else:
            #create the diretcory and download the file to it
            print("directory doesn't exist, creating it now")
            os.makedirs(os.getcwd()+ "/" + head, exist_ok=True)
            print("directory created, download initiated")
            block_blob_service.get_blob_to_path('testcontainer',blob.name,os.getcwd()+ "/" + head + "/" + tail)
    else:
        block_blob_service.get_blob_to_path('testcontainer',blob.name,blob.name)

您还提到过使用Azure cli下载文件,因此我正在编写示例语法来实现

az storage file download \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt" \
    --dest "~/clouddrive/SampleDownload.txt"

代码示例

# Create a directory to store all the blobs
mkdir /downloaded-container && cd /downloaded-container

# Get all the blobs
BLOBS=$(az storage blob list -c $CONTAINER \
    --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN" \
    --query [*].name --output tsv)

# Download each one
for BLOB in $BLOBS
do
  echo "********Downloading $BLOB"
  az storage blob download -n $BLOB -f $BLOB -c $CONTAINER --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN"
done

更多参考,请访问下面的文档

https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/storage/files/storage-how-to-use-files-cli.md

答案 1 :(得分:0)

AzureException类是在azure-common包中定义的,您可以在here上查看其源代码。

我需要您在您的环境中进行一些测试。

  1. 通过命令pip检查当前的pip -V版本,如果使用的是Python 2.7,则当前输出应类似于pip 19.0.2 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

  2. 检查是否已通过命令azure-common安装了pip freeze软件包以列出您的Python环境中已安装的软件包,例如azure-common==1.1.18

  3. 如果您编写了用于下载blob文件的代码,通常建议的方法是首先创建一个Python虚拟环境并激活它,以避免不同软件包的冲突,因为可能会有一个Python 3 pip工具Linux或有关工作区的其他可能问题的默认设置。

  4. 如果您在Python虚拟环境中工作,则它不需要root角色或sudo权限。尝试命令ls -l来检查Python脚本的文件权限,结果类似于-rwxrw-rw- 1 <your user name> 1049089 492 Apr 2 16:52 test.py。您可以参考两个页面(12)来了解有关Linux文件权限的更多详细信息,也可以chmod

您描述中的有用信息很少,因此我无法提供更多修复建议。期望您发布更新,它可以帮助您快速解决问题。

任何更新或关注,请随时让我知道。