当前位置: 首页 > 知识库问答 >
问题:

使用python从s3 bucket内部文件夹下载最新文件,而不是从内部文件夹--folder下载

孙绍辉
2023-03-14

我只想从s3 bucket inside文件夹下载最新文件。实际上,文件夹中有多个文件夹和文件。但我只需要下载最新日期的文件,并通过从多个文件夹中选择将其上载到一个文件夹中。我指的是stackoverflow源代码中的代码。

下面是s3桶的结构:

  S3-Bucket : --folder_1
                  --abc2022.01.29.csv
                  --bsv2022.02.18.csv
                  --test2022.03.04.csv
                  --Folder_12
                  --Folder_13
                  --folder_14

所以基本上,我想从文件夹(文件夹_1)内的s3 bucket下载最新文件,而不是从文件夹(文件夹_12、文件夹_13、文件夹_14)内下载最新文件。

我得到以下错误:

TypeError: 'NoneType' object is not subscriptable

以下是用于下载最新文件的代码片段:

  def get_most_recent_s3_object(bucket_name, prefix)

       s3 = session.client('s3')
       paginator = s3.get_paginator( "list_objects_v2" )
       page_iterator = paginator.paginate(Bucket=bucket_name, Prefix=prefix, Delimiter="/")
       latest = None
       for page in page_iterator:
           if "Contents" in page:
               latest2 = max(page['Contents'], key=lambda x: x['LastModified'])
               if latest is None or latest2['LastModified'] > latest['LastModified']:
                    latest = latest2
                    with open(latest, 'wb') as f:
                         s3.download_fileobj(bucket_name, latest, 'C:\\Users\xxxx\\)
      return latest
      

  latest = get_most_recent_s3_object(bucket_name='bucket_name_1', prefix='folder_1')
  print(latest['Key'])

但我无法下载到我的本地路径。代码是从文件夹中的文件夹中获取最新文件,而不是从文件夹中的s3 bucket(文件夹_1)获取最新文件。

共有1个答案

朱锦
2023-03-14

我已经修改了下面的代码来下载文件夹内s3-桶中的最新文件,它工作正常。请找到下面的工作代码片段。

def get_most_recent_s3_object(bucket_name, prefix)

   s3 = session.client('s3')
   paginator = s3.get_paginator( "list_objects_v2" )
   page_iterator = paginator.paginate(Bucket=bucket_name, Prefix=prefix, Delimiter="/")
   latest = None
   for page in page_iterator:
       if "Contents" in page:
           latest2 = max(page['Contents'], key=lambda x: x['LastModified'])
           if latest is None or latest2['LastModified'] > latest['LastModified']:
                latest = latest2.get('Key')
                with open(C:\\Users\xxxx\\dummy.csv', 'wb') as f:
                     s3.download_fileobj(bucket_name, latest, f)
                print('Latest file downloaded successfully....!!!')
  
  

  latest = get_most_recent_s3_object(bucket_name='bucket_name_1', prefix='folder_1/')
 类似资料:
  • 我将一个bucket名称存储为string 我想从这个s3桶下载文件,并作为附件结束一封电子邮件。这个文件夹中只有一个文件,但要得到这个文件,我们需要在文件夹上迭代,因为我不知道文件的名称。 这是我正在做的,但这个代码给我错误。 str对象没有属性 这是我的python代码 我是python新手

  • 我如何下载到我的笔记本电脑通过终端使用“wget”或python或任何相关的东西。

  • 我需要选择和下载存储在计算机上的许多文件夹,我只能通过远程ssh连接访问这些文件夹。我创建了一个列表(“list.txt”)来只下载我感兴趣的文件夹,我尝试使用一个“for”循环 但是不要阅读我的列表并卸载所有文件夹,我也尝试过 我能做什么?谢了!

  • 我正在使用python 2.7. x和Boto API 2. X连接到AWS S3桶。我有一个独特的情况,我想从S3桶下载文件,从一个特定的目录/文件夹说。但问题是我想在S3文件夹中留下一个最新的文件,而不是下载它。一旦,我在我的本地框中下载这些文件,我想将这些文件移动到同一个桶下的不同文件夹说。以前有人处理过类似的情况吗? 以下是一些解释: 将下载的文件从S3存储桶移动到同一存储桶下的不同文件夹

  • 我目前正在制作一个Minecraft Mod Loader。 正如您在上面看到的,我有一个名为Client的类。当Minecraft游戏启动时,启动被调用。现在我有一个名为Mods的文件夹,在调用startup时,我需要将Mods从Mods文件夹加载到ArrayList命名模块中。更深入地说,每个Mod将有一个继承这个模块类的主类 因此,在调用startup时,我需要遍历mods文件夹中的每个Mo

  • 问题内容: 我对linux和svn相当陌生。我正在尝试使用此命令(在public_html中)将项目的主干文件夹检出到我的public_html目录中: waterproject目录包含解开基本安装的drupal的文件。 除了所有文件都位于而不是仅位于中,它可以很好地进行检出。 我不知道将主干的所有内容上移到public_html和rm trunk的命令,但是我认为我可以相对容易地解决这一问题。我