ImportError: невозможно импортировать имя «BlockBlobService» из «azure .storage.blob» - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь преобразовать текстовые файлы в моем контейнере BLOB-объекта Azure из кодировки ANSI в кодировку UTF-8, не загружая файлы локально, используя python. При попытке импортировать BlockBlobService в коде Python в моем коде Azure Blob Storage появляется следующая ошибка. Я полагаю, что у меня уже установлены правильные python модули, но может быть какой-то другой модуль, который отсутствует, о котором я не знаю, или это может быть «не правильная версия python модуля». Команда «pip list» показывает следующее на моей виртуальной машине. Любая помощь в этом была бы хороша.

список пунктов Версия пакета


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

1 Ответ

1 голос
/ 21 апреля 2020

Если ваша кодировка BLOB не UTF-8, она не может изменить ее. И вы сказали, что хотите использовать create_blob_from_text, чтобы сделать это, поэтому я предполагаю, что ваш текстовый файл не UTF-8, и вы хотите изменить его на UTF-8, чтобы загрузить его.

Во-первых, вы должны знать, если ваш текстовый файл UTF-8, вам не нужно ничего менять, просто загрузите его, он все равно будет UTF-8. Однако, если ваш файл не UTF-8, он не будет преобразован в UTF-8, он будет закодирован в UTF-8 с оригинальной кодировкой. Если бы вы могли это понять, вы знаете, как загрузить свой файл в azure blob с кодировкой UTF-8.

Как показано ниже, я загружаю текстовый файл с кодировкой 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)

Ниже приведен пи c, слева - исходный файл с кодировкой GBK, справа - файл, загружаемый из BLOB-объекта azure, закодированного с помощью '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

...