【问题标题】:Get a specific file from s3 bucket (boto3)从 s3 存储桶 (boto3) 获取特定文件
【发布时间】:2019-03-02 14:56:08
【问题描述】:

所以我的存储桶“test”上有一个 file.csv,我正在创建一个新会话,我想下载这个文件的内容:

session = boto3.Session(
aws_access_key_id=KEY,
aws_secret_access_key=SECRET_KEY
)
s3 = session.resource('s3')
obj = s3.Bucket('test').objects.filter(Prefix='file.csv')

这会返回一个集合,但有没有办法直接获取文件?没有任何循环,我想做类似的事情:

s3.Bucket('test').objects.get(key='file.csv')

我可以在不传递这样的凭据的情况下获得相同的结果:

s3 = boto3.client('s3')
obj = s3.get_object(Bucket='test', Key='file.csv')

【问题讨论】:

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


    【解决方案1】:

    如果你看一下client 方法:

    import boto3
    
    s3_client = boto3.client('s3')
    s3_client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
    

    resource 方法:

    import boto3
    
    s3 = boto3.resource('s3')
    s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
    

    您会注意到,您可以使用meta.clientresource 转换为client

    所以,把它和你的代码结合起来得到:

    session = boto3.Session(aws_access_key_id=KEY, aws_secret_access_key=SECRET_KEY)
    s3 = session.resource('s3')
    obj = s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
    

    【讨论】:

      【解决方案2】:

      我喜欢mpu.aws.s3_download,但我有偏见;-)

      它是这样的:

      import os
      import boto3
      
      def s3_download(bucket_name, key, profile_name, exists_strategy='raise'):
          session = boto3.Session(profile_name=profile_name)
          s3 = session.resource('s3')
          if os.path.isfile(destination):
              if exists_strategy == 'raise':
                  raise RuntimeError('File \'{}\' already exists.'
                                     .format(destination))
              elif exists_strategy == 'abort':
                  return
          s3.Bucket(bucket_name).download_file(key, destination)
      

      对于身份验证,我建议使用环境变量。详情请见boto3: Configuring Credentials

      【讨论】:

        【解决方案3】:

        你可以使用下面的boto3方法。

        download_file(Bucket, Key, Filename, ExtraArgs=None, Callback=None, 配置=无)

        s3 = boto3.resource('s3')
        s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
        

        在这里找到更多细节 - download_file()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-07
          • 2017-09-29
          • 2015-11-02
          • 2016-07-12
          • 1970-01-01
          • 2018-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多