簡體   English   中英

ImportError:無法從“azure.storage.blob”導入名稱“BlockBlobService”

[英]ImportError: cannot import name 'BlockBlobService' from 'azure.storage.blob'

我正在嘗試將 Azure blob 容器中的文本文件從 ANSI 轉換為 UTF-8 編碼,而無需使用 python 在本地下載文件。 當我嘗試在我的 Python 代碼中導入BlockBlobService以處理 Azure Blob 存儲時,出現以下錯誤。 我相信我已經安裝了正確的 python 模塊,但可能還有其他一些我不知道的模塊丟失,或者它可能是“沒有正確的 python 模塊版本”。 “pip list”命令在我的虛擬機上顯示以下內容。 對此的任何幫助都會很好。

pip 列表Package 版本


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

Azure-storage-blob,版本:12.3.0 是包含 BlobServiceClient 而不是 BlockBlobService 的最新版本,因此如果要使用 BlockBlobService,則必須將 azure-storage-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'。

在此處輸入圖像描述

更新:我將文本文件打開到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)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM