从 2019 年开始更新答案
上传和删除 Blob 有两种方法,第一种使用新的 azure-storage-blob 库(2019 年),第二种使用旧的 azure-storage 库(2019 年之前)。
如果您是 2019 年以后的 updated Quick Start guide 之后的新用户,请使用方法 1。
方法1.使用新的azure-storage-blob库(2019)
如果已安装旧的azure-storage 库,请先卸载它,然后安装新的azure-storage-blob 库。对 Python 3 使用 pip3 或对 Python 2 使用 pip:
pip3 uninstall azure-storage
pip3 install azure-storage-blob
根据您的 Python 版本,pip freeze 或 pip3 freeze 应该显示以下内容:
azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage-blob==12.0.0
如果要使用同一客户端上传文件和删除 blob,请使用 ContainerClient。文档可以在here找到。
使用ContainerClient上传文件的代码:
from azure.storage.blob import ContainerClient
CONNECT_STR = ""
CONTAINER_NAME = ""
input_file_path = "/path/to/your/input_file.csv"
output_blob_name = "output_blob.csv"
container_client = ContainerClient.from_connection_string(conn_str=CONNECT_STR, container_name=CONTAINER_NAME)
# Upload file
with open(input_file_path, "rb") as data:
container_client.upload_blob(name=output_blob_name, data=data)
使用ContainerClient删除blob的代码:
from azure.storage.blob import ContainerClient
CONNECT_STR = ""
CONTAINER_NAME = ""
blob_name = "output_blob.csv"
container_client = ContainerClient.from_connection_string(conn_str=CONNECT_STR, container_name=CONTAINER_NAME)
# Delete blob
container_client.delete_blob(blob=blob_name)
或者,您可以使用BlobServiceClient 按照Quick Start guide 上传文件。
使用BlobServiceClient上传文件的代码:
from azure.storage.blob import BlobServiceClient
CONNECT_STR = ""
CONTAINER_NAME = ""
input_file_path = "/path/to/your/input_file.csv"
output_blob_name = "output_blob.csv"
blob_service_client = BlobServiceClient.from_connection_string(CONNECT_STR)
blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=output_blob_name)
# Upload file
with open(input_file_path, "rb") as data:
blob_client.upload_blob(data=data)
方法 2. 使用旧的 azure-storage 库(2019 年之前)
如果已安装新的azure-storage-blob 库,请先卸载它,然后安装旧的azure-storage 库。对 Python 3 使用 pip3,对 Python 2 使用 pip:
pip3 uninstall azure-storage-blob
pip3 install azure-storage
根据您的 Python 版本,pip freeze 或 pip3 freeze 应该显示以下内容:
azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage==0.36.0
我们可以使用BlockBlobService客户端上传文件和删除blob。
使用BlockBlobService上传文件的代码:
from azure.storage.blob import BlockBlobService
AZURE_STORAGE_ACCOUNT_NAME = ""
AZURE_STORAGE_ACCOUNT_KEY = ""
CONTAINER_NAME = ""
input_file_path = "/path/to/your/input_file.csv"
output_blob_name = "output_blob.csv"
block_blob_service = BlockBlobService(account_name=AZURE_STORAGE_ACCOUNT_NAME, account_key=AZURE_STORAGE_ACCOUNT_KEY)
# Upload file
block_blob_service.create_blob_from_path(CONTAINER_NAME, output_blob_name, input_file_path)
使用BlockBlobService删除blob的代码:
from azure.storage.blob import BlockBlobService
AZURE_STORAGE_ACCOUNT_NAME = ""
AZURE_STORAGE_ACCOUNT_KEY = ""
CONTAINER_NAME = ""
blob_name = "output_blob.csv"
block_blob_service = BlockBlobService(account_name=AZURE_STORAGE_ACCOUNT_NAME, account_key=AZURE_STORAGE_ACCOUNT_KEY)
# Delete blob
block_blob_service.delete_blob(CONTAINER_NAME, blob_name)
背景
正如answer 中所述,自 0.37.0 以来,azure-storage 库中引入了重大更改。根据change log,不仅命名空间发生了变化,而且库也被分成了5个不同的包:
- azure-storage-common
- 天蓝色存储blob
- 天蓝色存储文件
- 天蓝色存储队列
- 天蓝色存储-nspkg
尽管其他帖子中已经提供了许多答案,但我想指出,对于 2019 年以后尝试此功能的新用户,尝试为该库找到正确的代码是很复杂的,因为这里提供了许多(如果不是大多数)答案在 * 上仍然引用旧库 azure-storage,但新用户遵循 Microsoft 于 2019 年 5 月更新的新教程,它使用新的 azure-storage-blob 代替。搜索帮助的新用户会无意中发现使用旧的 azure-storage 库的旧答案,但这些对他们不起作用。