AWS S3根据条件路径检查文件是否存在

时间:2019-05-29 17:02:26

标签: python-3.x amazon-web-services amazon-s3

如果给定文件存在,我想检查文件是否存在于存储桶的单独目录中。我具有以下目录结构-

import boto3
s3 = boto3.resource('s3')
def file_exists(fileN):
    try:
        s3.Object('my-bucket', 'folder1/folder2/'+fileN).load()
    except:
        return False
    else:
        fileN = fileN.split(".")[0]
        try:

            s3.Object('my-bucket', 'folder1/<randomid folderxxxx>/'+fileN+'_condition.jpg').load()
        except:
            return False
        else:
            return True

file_exists("test.jpg")

这可行,但是只要我可以发送randomfolderID作为参数即可。有没有更好,更优雅的方法呢?

基本上我必须检查一下,

my-bucket/folder1/folder2/test.jpg(如果存在),然后检查 my-bucket/folder1/<randomID>/test_condition.jpg(如果还存在),然后返回True

2 个答案:

答案 0 :(得分:1)

无法通过通配符指定对象键。

相反,您需要做一个存储桶列表(可以针对整个存储桶,也可以针对某个路径),然后执行自己的逻辑来识别感兴趣的文件。

如果对象数很少(例如几千个),则可以轻松地检索列表并将其保存在内存中,以便在Python列表中进行快速比较。

如果有数百万个对象,则可以考虑使用Amazon S3 Inventory,它可以提供每日CSV文件,其中列出了存储桶中的所有对象。使用这样的文件比扫描存储桶本身更快。

答案 1 :(得分:0)

我最终使用了它,它提供了更简洁的代码

posts/