【问题标题】:Write zip to Blob storage Azure将 zip 写入 Blob 存储 Azure
【发布时间】:2023-01-03 18:07:10
【问题描述】:

我正在尝试压缩容器“输入”中存在的文件并将它们移动到容器“输出”。
我正在使用 python SDK

# connection to blob storage via Azure Python SDK
connection_string = "myConnectionString"

blob_service_client = BlobServiceClient.from_connection_string(connection_string)

# get container client
input_container = blob_service_client.get_container_client(container="input")

# filename
filename = "document_to_zip.pdf"

# init zip object
zip_filename = "document_zipped.zip"
zip_object = ZipFile(zip_filename, "w")

data = input_container.download_blob(filename).readall()
zip_object.write(data)

# upload blob to results container as .zip file
results_blob = blob_service_client.get_blob_client(container="output",blob=zip_filename)
results_blob.upload_blob(zip_object, overwrite=True)

收到以下错误:
异常:ValueError:stat:路径中嵌入了空字符。
更一般的问题:关于将 blob 从一个容器压缩和移动到另一个容器,您认为我的方法是否合适?

谢谢

【问题讨论】:

  • 你能否详细说明你的问题。您正在尝试将 zip 文件从输入容器移动到输出容器,或者您需要将 pdf 文件转换为 zip 文件

标签: python azure-blob-storage azure-sdk-python


【解决方案1】:

通常,当路径中包含“/”或“”时会发生此错误。同时,我可以通过删除 zip_object.write(data) 行来解决它。另请记住,上述代码仅适用于输入容器中包含不受支持的内容的单个文件,该文件在下载时会引发错误。

下面的代码有效,但下载时出错

from azure.storage.blob import BlobServiceClient
from zipfile import ZipFile

# connection to blob storage via Azure Python SDK
connection_string = "<YOUR_CONNECTION_STRING>"

blob_service_client = BlobServiceClient.from_connection_string(connection_string)

# get container client
input_container = blob_service_client.get_container_client(container="input")

# filename
filename = "document_to_zip.pdf"

# init zip object
zip_filename = "document_zipped.zip"
zip_object = ZipFile(zip_filename, "w")

data = input_container.download_blob(filename).readall()

# upload blob to results container as .zip file
results_blob = blob_service_client.get_blob_client(container="output",blob=zip_filename)
results_blob.upload_blob(zip_object, overwrite=True)

结果:


同时,您可以通过在输入容器内循环并将它们压缩到输出容器内来保存一组文件。

from azure.storage.blob import BlobServiceClient
from zipfile import ZipFile

connection_string = "<Your_CONNECTION_STRING>"

blob_service_client = BlobServiceClient.from_connection_string(connection_string)

input_container = blob_service_client.get_container_client(container="input")

generator = input_container.list_blobs()
for blob in generator:    
    data = input_container.download_blob(blob.name).readall()
    results_blob = blob_service_client.get_blob_client(container="output"+"/"+"ZipFolder.zip",blob=blob.name)
    results_blob.upload_blob(data, overwrite=True)

结果:

【讨论】:

    【解决方案2】:

    我们需要使用 python 在 azure blob 中的同一位置压缩和解压缩文件

    您能否提供一些想法来实现这一目标?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2021-04-30
    • 2019-03-08
    • 2019-11-27
    • 1970-01-01
    • 2021-08-05
    • 2021-02-28
    相关资源
    最近更新 更多