如何借助python检查aws s3路径是否存在?
我正在尝试编写python程序来检查路径是否存在。例如,给定路径如何借助python检查aws s3路径是否存在?,python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,我正在尝试编写python程序来检查路径是否存在。例如,给定路径/root/subfolder1/subfolder2/,我想将此路径传递给S3API,以检查AWS S3中是否存在此路径 我已经尝试过这一点,但它不是满足我要求的全面解决方案: import boto3 import botocore client = boto3.client('s3',aws_access_key_id=AccessKey, aws_secret_access_key=SecretAccessKey,regio
/root/subfolder1/subfolder2/
,我想将此路径传递给S3API,以检查AWS S3中是否存在此路径
我已经尝试过这一点,但它不是满足我要求的全面解决方案:
import boto3
import botocore
client = boto3.client('s3',aws_access_key_id=AccessKey, aws_secret_access_key=SecretAccessKey,region_name='us-east-1')
result = client.list_objects(Bucket=full_poc", Prefix="sub_folder1/sub_folder2/full" )
print(result)
exist = False
if "Contents" in result:
exist = True
print(exist)
使用此代码,即使我通过sub
而不是sub\u folder1
它也会打印True
解决此问题的其他方法有哪些?:
在AmazonS3中,bucket和对象是主要资源,对象存储在bucket中。AmazonS3具有扁平结构,而不是像文件系统中那样的层次结构。然而,为了组织的简单性,AmazonS3控制台支持文件夹概念作为对象分组的一种方式。AmazonS3通过使用对象的共享名称前缀来实现这一点(即,对象的名称以公共字符串开头)。对象名称也称为键名称
/root/subfolder1/subfolder2/
可以“存在”的唯一方法是,如果您有一个对象,其键以/root/subfolder1/subfolder2/
开头。并查看是否有以该前缀开头的,例如
any((s.startswith(“/root/subfolder1/subfolder2/”)用于bucket.objects.all()中的s)
在S3中没有所谓的文件夹。文件夹基本上是一个名称以“/”结尾的空文件。我们可以检查两件事
- getObject导致正文为空
- 确保键的名称在getObject之前以
结尾。进行此检查的原因是,我们不希望获取实际对象,除非我们知道它是文件夹名称,否则将导致不必要的数据传输/
s3 = boto3.client('s3')
key = 'myfolder1/subfolder/'
try:
if(key.endswith('/')):
obj = s3.get_object(Bucket='my-bucket',
Key=key)
if(len(obj.get('Body').read()) == 0):
folder = True
else:
folder = False
except Exception as e:
folder = False
if(folder):
print("yes its a folder")
else:
print("No Its not")
您所说的“即使我通过
sub
而不是sub\u folder1
它也会打印True
”是什么意思?你能举个完整的例子吗?此外,您在该代码中存在引用问题。我猜您想做客户端。列出对象(Bucket=“full\u poc”…
?为什么要检查路径是否存在?您可以将对象存储在S3中的任何路径中,而无需创建文件夹。@Tg。这是问题的答案,即使答案不正确。请不要在低质量帖子队列中删除它。
import os
import tensorflow as tf
os.environ['AWS_REGION'] = 'us-west-2'
os.environ['S3_ENDPOINT'] = 's3-us-west-2.amazonaws.com'
print(tf.gfile.Exists('s3path'))#返回True or False