如果给定文件存在,我想检查文件是否存在于存储桶的单独目录中。我具有以下目录结构-
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
答案 0 :(得分:1)
无法通过通配符指定对象键。
相反,您需要做一个存储桶列表(可以针对整个存储桶,也可以针对某个路径),然后执行自己的逻辑来识别感兴趣的文件。
如果对象数很少(例如几千个),则可以轻松地检索列表并将其保存在内存中,以便在Python列表中进行快速比较。
如果有数百万个对象,则可以考虑使用Amazon S3 Inventory,它可以提供每日CSV文件,其中列出了存储桶中的所有对象。使用这样的文件比扫描存储桶本身更快。
答案 1 :(得分:0)
我最终使用了它,它提供了更简洁的代码
posts/