在给定路径的情况下在S3中搜索文件

时间:2018-12-23 12:14:28

标签: python django amazon-web-services amazon-s3

给出S3存储桶的路径,我需要在同一路径中找到另一个文件并对其进行处理。

  • 我正在Python中使用Django。
  • 我有一个名为“ HouseList”的模型和一个名为“ CustomerFile”的模型
  • 我正在使用一个函数,该函数返回需要修改的HouseList对象的列表。

对于那里的每个对象,我都有一个文件路径,在该路径中,我可以找到相应的客户文件,如您从终端的以下打印图中看到的那样:

In [7]: HouseList.objects.get(id=11508).file_path
Out[7]: u'85/1545927/omc_emea_hl_small.csv'

In [8]: CustomerFile.objects.get(id=5031).file_path
Out[8]: u'85/1545927/omc_emea_pos_small.csv'

有没有一种方法,给定路径的前缀,以获取其中所有文件的列表?

2 个答案:

答案 0 :(得分:1)

您可以在Python中使用s3 boto模块列出位于其中的具有给定前缀的文件:http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.list

  

前缀(字符串)–允许您将列表限制为特定的前缀。例如,如果您使用prefix =” / foo /”调用该方法,则迭代器将仅循环浏览以字符串“ / foo /”开头的键。

答案 1 :(得分:1)

list_objects_v2()函数可以返回给定前缀的对象列表:

response = client.list_objects_v2(
    Bucket='string',
    Delimiter='string',
    EncodingType='url',
    MaxKeys=123,
    Prefix='string',
    ContinuationToken='string',
    FetchOwner=True|False,
    StartAfter='string',
    RequestPayer='requester'
)

因此,您将使用类似的内容:

path = HouseList.objects.get(id=11508).file_path

response = client.list_objects_v2(
    Bucket=your_bucket,
    Prefix=path[:path.rfind('/')+1],
)