繁体   English   中英

将 csv 个文件从 azure blob 存储 A 复制到 azure blob 存储 B

[英]copy csv files from azure blob storage A to azure blob storage B

我想将文件从 A blob 存储复制到 blob B,条件是只将新文件复制/写入存储 B。我正在使用 BlockBlobService package 列出一个 blob A 的所有文件,但是这个 package 是否也有一个 function 到将新文件复制/写入另一个 blob 存储?? 我在 Python 顺便说一句.. 请帮帮我:(...我现在有点无助,我尝试使用这个 package DataLakeServiceClient 将文件写入 azure blob 存储 B。但是这个打包的 DataLakeServiceClient 不兼容使用 BlockBlobService。所以我知道该怎么做。

如果您尝试过另一种方法来做我想做的同样的事情,请与我分享您的智慧和知识。

我会说,试试azcopy工具。 它支持在存储帐户之间复制数据。 例如:

azcopy copy 'https://sourceacc.blob.core.windows.net/container/dir' 'https://destacc.blob.core.windows.net/container' --recursive

然后,将它与值为falseifSourceNewer--overwrite标志一起使用,以指定目标处现有 blob 的行为:

--overwrite (string)如果此标志设置为 true,则覆盖目标处的冲突文件和 blob。 (默认为“true”)可能的值包括“true”、“false”、“prompt”和“ifSourceNewer”。 对于支持文件夹的目标,冲突的文件夹级属性将被覆盖此标志为“真”或者如果对提示提供肯定响应。 (默认“真”)

有关如何开始的信息,请参阅此文档

从我这边复制后,我可以使用 BlockBlobService 的get_blob_to_pathcreate_blob_from_path来实现这一点 以下是对我有用的完整代码。

from azure.storage.blob import BlockBlobService
import os 

SOURCE_ACCOUNT_NAME = "<source_Account_Name>"
SOURCE_CONTAINER_NAME = "<source-container>"
SOURCE_SAS_TOKEN='<Source_Storage_Account_SAS_Token>'

DESTINATION_ACCOUNT_NAME = "<destination_Account_Name>"
DESTINATION_CONTAINER_NAME = "<destination-container>"
DESTINATION_SAS_TOKEN='<Destination_Storage_Account_SAS_Token>'

source_blob_service = BlockBlobService(account_name=SOURCE_ACCOUNT_NAME,account_key=None,sas_token=SOURCE_SAS_TOKEN)
destination_blob_service = BlockBlobService(account_name=DESTINATION_ACCOUNT_NAME,account_key=None,sas_token=DESTINATION_SAS_TOKEN)

generator = source_blob_service.list_blobs(SOURCE_CONTAINER_NAME)
for blob in generator:
    blobname=blob.name
    source_blob_service.get_blob_to_path(SOURCE_CONTAINER_NAME,blobname,blobname,'wb')
    destination_blob_service.create_blob_from_path(DESTINATION_CONTAINER_NAME,blobname,blobname)
    os.remove(blobname)

结果:

在此处输入图像描述

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM