【发布时间】:2020-03-14 05:26:39
【问题描述】:
我有一组文件(未本地保存)需要上传到 azure blob 存储并每天更新。
(1) 有一定数量的同名文件(内容不同)应保存为单独的 blob。
(2) 更新的文件集应覆盖相应的前一天 blob。
有没有办法检查 blob 是否已经存在并通过附加一个数字来动态重命名它(因为 (2) 不能附加时间戳)?
我正在使用以下函数上传我的所有文件:
def azure_upload_file(block_blob_service, container, local_file_path, local_file_name):
logger = logging.getLogger('data')
isExist = block_blob_service.exists(container, local_file_name)
blobname = os.path.splitext(local_file_name)[0]
blobext = os.path.splitext(local_file_name)[1]
if isExist is True:
blob_file_name = '{}_{}{}'.format(blobname, '#', blobext)
else:
blob_file_name = local_file_name
full_path_to_file =os.path.join(local_file_path, local_file_name)
blob = block_blob_service.create_blob_from_path(container, blob_file_name, full_path_to_file)
blob_url = block_blob_service.make_blob_url(container, blob_file_name)
logger.info('Uploaded file {} to azure blob storage'.format(blob_file_name))
os.unlink(full_path_to_file)
return blob_url
例子:
日期:2019 年 19 月 11 日 - 首次上传
filename.ext -> blob
1. abcd.zip -> abcd.zip
2. abcd.zip -> abcd(1).zip
3. abcd.zip -> abcd(2).zip
4. defg.csv -> defg.csv
等等..
我想要的只是以某种方式智能地填充代码中的“#”,这样每当我拥有更新的文件集时,我就已经知道应该将文件覆盖到哪个 blob。
即,如果我在 2019 年 11 月 20 日有一组新文件
例子:
日期:20-11-2019 - 第二次上传
新文件名.ext -> blob
1. abcd.zip -> abcd.zip
2. abcd.zip -> abcd(1).zip
3. abcd.zip -> abcd(2).zip
4. defg.csv -> defg.csv
等等..
我已经浏览过类似的文章:
1.Azure blob upload rename if blob name exist
2.Faster Azure blob name search with python?
它们都不能解决我的问题。想知道是否有一种有效且简单的方法可以实现这一目标?
【问题讨论】:
-
我的理解是这样的: 1. 首先,您尝试上传一个 blob,如果它已经存在,然后根据上传 bob 的时间决定是要覆盖它还是复制它? 2. 如果 blob 是在今天之前上传的,则覆盖它,否则将 (1) 添加到名称中并上传新的 blob 让我知道这是否不是您要执行的操作
-
@rakshith1124 不完全是。 (1) 我想将一组文件(其中一些具有完全相同的名称)上传到 azure blob 存储。 (2) 这组文件每天都有新版本。所以,一旦我得到这些新版本,我应该为它们中的每一个覆盖已经存在的 blob。
-
你有没有试过的代码?
标签: python azure azure-blob-storage