在同时创建文件夹内的文件夹和文件时获取最新的AWS S3文件夹boto3

时间:2018-06-18 20:55:48

标签: python-3.x amazon-s3 boto3

我试图使用下面的代码

获取给定s3前缀中的最新文件夹

例如:

S3A://mybucket/data/timestamp=20180612165132/part1.parquete S3A://mybucket/data/timestamp=20180612165132/part2.parquete S3A://mybucket/data/timestamp=20180613165132/part1.parquete S3A://mybucket/data/timestamp=20180614165132/part1.parquete S3A://mybucket/data/timestamp=20180615165132/part1.parquete

我需要找到数据文件夹下的最新时间戳文件夹..

  keys = []
  oldest = None

  kwargs = {'Bucket': bucket_name, 'Prefix': key}
  while True:
      resp = get_conn().list_objects_v2(**kwargs)
      for obj in resp['Contents']:
          keys.append({'Key': obj['Key'], 'LastModified': obj['LastModified']})

      try:
          kwargs['ContinuationToken'] = resp['NextContinuationToken']
      except KeyError:
          break

  logger.info("Got {0} keys".format(len(keys)))

  for key in keys:
      oldest = key['LastModified'] if oldest is None or key['LastModified'] < oldest else oldest

  return oldest

问题是我在每个timestamp文件夹下有100个文件,在上面的im中获取每个文件的时间戳,找到每个timestamp文件夹下的最旧文件,以了解时间戳文件夹创建日期

我使用此代码作为s3将整个事物视为1个对象

 s3a://mybucket/data/timestamp=20180612165132/part1.parquete

无法获取timestamp文件夹的LastModifiedDate

这是非常昂贵的我觉得可以有数百个时间戳文件夹,每个文件夹有100个文件..

有没有最好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:0)

正如Josh在评论中所说:没有目录,因此没有目录时间戳。

这些工具只是用来构成它们的,例如S3AFileStatus中。

一些想法

  1. 如果“文件夹”的名称带有时间戳,请在后缀为“ /” ^的父路径列表中查找时间戳最高的条目。
  2. 让每个查询在基本目录中写入一些索引文件,其中包含其目录的字符串。加载该文件,您将获得最新文件的名称。以后的作业将被覆盖。警告:S3覆盖一致性意味着您可能至少在短时间内(几秒钟,几十秒,最坏的情况(通常))获得旧版本

选项2可能最快