我有一组文件(未在本地保存)需要上传到 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 年 11 月 19 日 - 初始上传
文件名.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 日有一组新文件
示例:
日期:2019 年 11 月 20 日 - 第二次上传
新文件名.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?
这两个都不能解决我的问题。想知道是否有一种有效且简单的方法可以实现这一目标?
最佳答案
如果您考虑拥有同一文件的多个版本,则只需在 blob 名称中附加一个时间戳即可:
- abcd20191118131800.zip
- abcd20191118131900.zip
按文件名(升序/降序)排序将为您提供最新/最旧的文件
关于python - 动态重命名 Azure Blob(如果已上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58921410/