我正在使用boto、python和amazon s3。
如果我用
[key.name for key in list(self.bucket.list())]
然后我拿到所有文件的钥匙。
mybucket/files/pdf/abc.pdf
mybucket/files/pdf/abc2.pdf
mybucket/files/pdf/abc3.pdf
mybucket/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/new/abc.pdf
mybucket/files/pdf/2011/
什么是最好的方法
1. either get all folders from s3
2. or from that list just remove the file from the last and get the unique keys of folders
我想这样做
set([re.sub("/[^/]*$","/",path) for path in mylist]
根据sethwm的回答:
要获取顶级目录:
要获取
files
的子目录:等等。
这将是一个不完整的答案,因为我不知道python或boto,但我想评论一下这个问题的基本概念。
其他海报之一是对的:S3中没有目录的概念。只有平键/值对。许多应用程序假装某些分隔符表示目录条目。例如“/”或“\”。有些应用甚至把一个虚拟文件放在适当的位置,这样如果“目录”清空了,你仍然可以在列表结果中看到它。
你不必总是把整个桶都拉下来,在本地进行过滤。S3有一个分隔列表的概念,在这个列表中,您可以指定您认为的路径分隔符(“/”、“\”、“|”、“foobar”等),S3将向您返回虚拟结果,这与您想要的类似。
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html( 看看分隔符头。)
这个API将为您提供一级目录。如果你在你的例子中有:
如果您传入一个带有前缀“”和分隔符“/”的列表,将得到以下结果:
如果您传入一个前缀为“mybucket/files/”和分隔符“/”的列表,将得到以下结果:
如果您传入一个前缀为“mybucket/files/pdf/”和分隔符“/”的列表,您将得到以下结果:
如果您想从结果集中删除pdf文件本身,那么在这一点上您将是独立的。
现在你在python/boto中是怎么做到的,我不知道。希望有办法通过。
正如jam建议的注释方法之一所指出的那样,返回一个前缀对象。如果您在一个名称/路径之后,则可以使用variablename。例如:
相关问题 更多 >
编程相关推荐