我正在尝试从azure存储blob下载文件。我正在错误以下。我正在使用python 2.7.5和azure-cli:2.0.64。但是当我使用sudo时,它的工作正常。有人可以帮我解决这个问题吗? 在此先感谢!!
无法导入名称“ AzureException”
答案 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
更多参考,请访问下面的文档
答案 1 :(得分:0)
AzureException
类是在azure-common
包中定义的,您可以在here上查看其源代码。
我需要您在您的环境中进行一些测试。
通过命令pip
检查当前的pip -V
版本,如果使用的是Python 2.7,则当前输出应类似于pip 19.0.2 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
。
检查是否已通过命令azure-common
安装了pip freeze
软件包以列出您的Python环境中已安装的软件包,例如azure-common==1.1.18
。
如果您编写了用于下载blob文件的代码,通常建议的方法是首先创建一个Python虚拟环境并激活它,以避免不同软件包的冲突,因为可能会有一个Python 3 pip工具Linux或有关工作区的其他可能问题的默认设置。
如果您在Python虚拟环境中工作,则它不需要root
角色或sudo
权限。尝试命令ls -l
来检查Python脚本的文件权限,结果类似于-rwxrw-rw- 1 <your user name> 1049089 492 Apr 2 16:52 test.py
。您可以参考两个页面(1,2)来了解有关Linux文件权限的更多详细信息,也可以chmod
。
您描述中的有用信息很少,因此我无法提供更多修复建议。期望您发布更新,它可以帮助您快速解决问题。
任何更新或关注,请随时让我知道。