使用python和boto3在Amazon S3中创建目录

2024-04-24 06:49:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道S3 bucket没有真正的目录,因为存储空间很小。但是可以用python/boto3编程创建目录,但我不知道如何创建。我在纪录片上看到过:

“虽然S3存储是平的:bucket包含键,但S3允许您通过在键中使用分隔符将目录树结构强加于bucket。 例如,如果将一个键命名为“a/b/f”,并使用“/”作为分隔符,那么S3将认为“a”是一个目录,“b”是“a”的子目录,“f”是“b”中的一个文件。“

我可以通过以下方法在S3存储桶中创建文件:

    self.client.put_object(Bucket=bucketname,Key=filename)

但我不知道如何创建目录。


Tags: 文件方法self目录clients3bucketput
3条回答

在键名末尾添加正斜杠/来创建目录对我不起作用:

client.put_object(Bucket="foo-bucket", Key="test-folder/")

必须提供Body参数才能创建目录:

client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')

来源:ryantuck in boto3 issue

只需要稍微修改一下密钥名。self.client.put_object(Bucket=bucketname,Key=filename)

这个应该改成

self.client.put_object(Bucket=bucketname,Key=directoryname/filename)

就这些。

如果您阅读了API文档,您应该能够做到这一点。

import boto3 
s3 = boto3.client("s3") 
BucketName = "mybucket"
myfilename = "myfile.dat"
KeyFileName = "/a/b/c/d/{fname}".format(fname=myfilename) 
with open(myfilename) as f : 
  object_data = f.read()
  client.put_object(Body=object_data, Bucket=BucketName, Key=KeyFileName)

老实说,它不是一个“真正的目录”,而是组织的预成型字符串结构。

相关问题 更多 >