Ash*_*uGG 22 amazon-s3 python-3.x boto3
如何检查 S3 中的特定目录中是否存在特定文件?我使用 Boto3 并尝试了这段代码(不起作用):
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
key = 'dootdoot.jpg'
objs = list(bucket.objects.filter(Prefix=key))
if len(objs) > 0 and objs[0].key == key:
print("Exists!")
else:
print("Doesn't exist")
Run Code Online (Sandbox Code Playgroud)
Sai*_*ish 28
检查S3文件夹时,有两种情况:
场景1
import boto3
def folder_exists_and_not_empty(bucket:str, path:str) -> bool:
'''
Folder should exists.
Folder should not be empty.
'''
s3 = boto3.client('s3')
if not path.endswith('/'):
path = path+'/'
resp = s3.list_objects(Bucket=bucket, Prefix=path, Delimiter='/',MaxKeys=1)
return 'Contents' in resp
Run Code Online (Sandbox Code Playgroud)
MaxKeys=1. 这样效率更高。即使文件夹包含大量文件,它也会快速响应仅其中一个内容。Contents响应检查场景2
import boto3
def folder_exists(bucket:str, path:str) -> bool:
'''
Folder should exists.
Folder could be empty.
'''
s3 = boto3.client('s3')
path = path.rstrip('/')
resp = s3.list_objects(Bucket=bucket, Prefix=path, Delimiter='/',MaxKeys=1)
return 'CommonPrefixes' in resp
Run Code Online (Sandbox Code Playgroud)
/。此前缀将仅检查该文件夹,而不检查该文件夹内。CommonPrefixes响应而不是Contents小智 10
import boto3
import botocore
client = boto3.client('s3')
def checkPath(file_path):
result = client.list_objects(Bucket="Bucket", Prefix=file_path )
exists=False
if 'Contents' in result:
exists=True
return exists
Run Code Online (Sandbox Code Playgroud)
如果提供的 file_path 存在则返回 True。示例: 's3://bucket/dir1/dir2/dir3/file.txt' file_path: 'dir1/dir2' 或 'dir1/' 注意:- 文件路径应从存储桶名称之后的第一个目录开始。
基本上,目录/文件是 S3 的一个对象。我为 this ( ) 创建了一个IsObjectExists返回Trueor的方法False。如果目录/文件不存在,它不会进入循环,因此方法返回False,否则它将返回True。
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('<givebucketnamehere>')
def IsObjectExists(path):
for object_summary in bucket.objects.filter(Prefix=path):
return True
return False
if(IsObjectExists("<giveobjectnamehere>")):
print("Directory/File exists")
else:
print("Directory/File doesn't exists")
Run Code Online (Sandbox Code Playgroud)
请注意,如果您要检查文件夹,请确保以/. 一个用例是,当您尝试检查名为 的文件夹时Hello,如果该文件夹不存在,则存在一个名为 的文件夹Hello_World。在这种情况下,方法将返回True。在这种情况下,您必须/在编码时将字符添加到文件夹名称的末尾。您可以在下面的示例中看到这是如何处理的
foldername = "Hello/"
if(IsObjectExists(foldername))
print("Directory/File exists")
Run Code Online (Sandbox Code Playgroud)
请尝试以下代码
\nfolders = bucket.list("","/")\nfor folder in folders:\n print (folder.name)\nRun Code Online (Sandbox Code Playgroud)\nPS 参考 URL(如何使用 python 脚本通过 boto 将文件从 Amazon S3 的一个存储桶复制到另一个存储桶)
\n| 归档时间: |
|
| 查看次数: |
50083 次 |
| 最近记录: |