2015-01-04 116 views
0

我正在与Python Boto合作使用S3。比方说,桶的名称是......桶。S3 - 获取目录密钥

在桶中,我有一个目录a。在一个,我有很多其他目录一,二,三...在每个目录一,二,三等,我有很多文件。

我试图检查一个目录如/ x存在。我试过这样的事情:

key = bucket.get_key('/a/one/') 

但没有运气。我的解决方法是返回

list(bucket.list("a/", "/")) 

并查看x是否存在于列表中,但似乎很混乱。另外,在返回的列表中,我有'a /'作为关键字。如果'a /',一个目录,是一个关键,那么'a/one /'也不应该是一个?

这样做的最好方法是什么?感谢任何帮助。

回答

1

S3没有目录的概念。目录通常被认为是“现有的”如果有一样的目录路径的关键,但在一个桶一个关键的这个例子是完全有效:

'/path/to/file/with/no/dir/file.txt' 

通知有因为没有按键输入:

'/path/' 
'/path/to/' 

虽然可能有,但必须加以管理。

你可以做的是看看是否有任何键驻留在您检查的目录,是这样的:

dir_exists = any([k.startswith(path) for k in s3_file_names]), 

否则,你必须保持在桶目录中的文件。

+0

那么,我现在正在检查列表中是否存在x,是不是像最初想象的那样混乱? – intl 2015-01-04 12:07:58

+0

它可能会返回一个“False Negative”,因为可以有一个'/ a/b/c'文件,但目录'/ a/b /'没有条目。你究竟想要做什么?也许有更好的答案。 – 2015-01-04 12:09:24

+0

简单地说,我想检查一个目录是否存在。在这种情况下,我想检查/ x,其中x是我正在检查的,存在。 – intl 2015-01-04 12:12:21