ImportError:无法从“azure.storage.blob”导入名称“BlockBlobsService”

2024-06-06 12:01:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Azure blob容器中的文本文件从ANSI转换为UTF-8编码,而无需使用python在本地下载这些文件。当我尝试在Python代码中导入BlockBlobService以处理Azure Blob存储时,出现以下错误。我相信我已经安装了正确的python模块,但是可能还缺少一些我不知道的模块,或者可能是“没有正确的python模块版本”。“pip list”命令在我的虚拟机上显示以下内容。这方面的任何帮助都会很好

pip list Package Version


azure-common         1.1.25
azure-core           1.4.0
azure-nspkg          3.0.2
azure-storage        0.36.0
azure-storage-blob   12.3.0
azure-storage-common 2.1.0
azure-storage-nspkg  3.1.0
bcrypt               3.1.7
certifi              2020.4.5.1
cffi                 1.14.0
chardet              3.0.4
cryptography         2.9
idna                 2.9
isodate              0.6.0
msrest               0.6.13
oauthlib             3.1.0
paramiko             2.7.1
pip                  20.0.2
pycparser            2.20
PyNaCl               1.3.0
python-dateutil      2.8.1
requests             2.23.0
requests-oauthlib    1.3.0
setuptools           41.2.0
six                  1.14.0
urllib3              1.25.8
wheel                0.34.2

Tags: 模块pipstoragecommonazurerequestsblob容器
2条回答

Azure存储blob,版本:12.3.0是包含BlobServiceClient而不是BlockBlobsService的最新版本,因此,如果要使用BlockBlobsService,必须将Azure存储blob版本指定为2.1.0。照办

pip install azure-storage-blob==2.1.0

这会解决你的问题

如果blob编码不是UTF-8,则无法更改它。你说你想用create_blob_from_text来做,所以我想你的文本文件不是UTF-8,你想把它改成UTF-8来上传它

首先你应该知道,如果你的文本文件是UTF-8,你不需要改变任何东西,只要上传它,它仍然是UTF-8。但是,如果您的文件不是UTF-8,它不会将其转换为UTF-8,它将使用原始编码编码为UTF-8。如果您能够理解这一点,您将知道如何使用UTF-8编码将文件上载到azure blob

如下所示,我上传了一个编码为GBK的文本文件

txt= open('D:/hello.txt').readline() # GBK Tex

charset = 'UTF-8'
block_blob_service.create_blob_from_text(container_name='test',blob_name='test-gbk.txt',text=txt.encode('ISO-8859-1').decode('GBK'),encoding=charset)

下面是图片,左边是用GBK编码的原始文件,右边是从azure blob下载的文件,它用“UTF-8”编码

enter image description here

更新:我将文本文件打开到BytesIO,然后用下面的代码上传它。您可以忽略latin-1

text=open('E:/test.txt',encoding='latin-1').readline()
charset = 'UTF-8'
buf=BytesIO(text.encode('ISO-8859-1').decode('ANSI').encode('UTF-8'))
block_blob_service.create_blob_from_stream(container_name='test',blob_name='test.txt',stream=buf)

enter image description here

相关问题 更多 >