folder_name = 'folder_name'
s3_resource = boto3.resource("s3")
bucket = s3_resource.Bucket(
settings.BUCKET
)
# Get file contents when the bucket is exists
if bucket:
objects = bucket.objects.filter(
Prefix=f"{folder_name}/"
)
for obj in objects:
# Get file contents
response = obj.get()
lines = response[u"Body"].read().decode("utf-8").split("\n")
# Handle code here
...
else:
print(f"Bucket {settings.BUCKET} does not exist!")
return
try:
client.create_bucket(
Bucket='root',
CreateBucketConfiguration={
'LocationConstraint': 'us-east-1',
},
)
except: # you can catch the specific error that boto3 throws when it already exists, I just don't remember what is this error.
pass
使用
boto3
:AmazonS3中不存在文件夹。您可以在任何路径中创建一个对象,它将起作用
AmazonS3管理控制台将使文件夹像普通文件夹一样“显示”,但它们实际上并不存在。例如,删除对象将使文件夹“消失”(因为它们实际上从未存在)
控制台中的创建文件夹按钮实际上创建了一个长度为零的对象,其键(文件名)等于文件夹的完整路径。删除零长度对象将使文件夹消失(但仅当文件夹为空时)
底线:不要关心文件夹是否存在。只需在需要的地方创建对象
在S3中,bucket在您的示例中仅为
root
。没有文件夹的概念,而是将每个文件存储在“link/key/path”下(您可以将其视为一个长文件名,其中包含“/”知道这一切你需要知道你的桶存在或不存在。之后,您可以使用特定密钥编写文件。不需要检查路径的一部分是否存在。如果您想避免文件重写,那么可以使用
head
方法来检查它,请参见下文要安全创建存储桶,请执行以下操作:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.create_bucket
要检查文件是否存在,请执行以下操作:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.head_object
相关问题 更多 >
编程相关推荐