zoukankan      html  css  js  c++  java
  • Pyhton 批量重命名 AWS S3 中的文件

    由于AWS S3 暂时没有直接重命名的接口.所以我们只能通过先用新名字复制文件.然后再删除原文件的方法来达到重名的的效果.

    运行脚本需要本地先配置好AWS CLI

    # -*- coding: utf-8 -*-
    
    import boto3
    
    # 这里输入你存储桶的名字
    BUCKET = 'bucket'
    
    s3_resource = boto3.resource('s3')
    s3 = boto3.client('s3')
    
    
    
    # 这个方法可以过滤出 某个存储桶下面的所有key
    def get_all_s3_keys(bucket):
        """Get a list of all keys in an S3 bucket."""
        keys = []
        s3_client = boto3.client('s3')
        kwargs = {'Bucket': bucket}
        while True:
            resp = s3_client.list_objects_v2(**kwargs)
            for obj in resp['Contents']:
                keys.append(obj['Key'])
    
            try:
                kwargs['ContinuationToken'] = resp['NextContinuationToken']
            except KeyError:
                break
    
        return keys
    
    #  这里是一个迭代器.而且可以过滤出你想要的对应的前缀和后缀的key 
    def get_matching_s3_keys(bucket, prefix='', suffix=''):
        """
        Generate the keys in an S3 bucket.
    
        :param bucket: Name of the S3 bucket.
        :param prefix: Only fetch keys that start with this prefix (optional).
        :param suffix: Only fetch keys that end with this suffix (optional).
        """
        kwargs = {'Bucket': bucket, 'Prefix': prefix}
        while True:
            resp = s3.list_objects_v2(**kwargs)
            for obj in resp['Contents']:
                key = obj['Key']
                if key.endswith(suffix):
                    yield key
    
            try:
                kwargs['ContinuationToken'] = resp['NextContinuationToken']
            except KeyError:
                break
    
    
    • 上面的代码帮我们遍历出来了所有key,然后利用boto3提供的copy()方法复制文件. 其实copy_object()也能复制,但是copy_object()如果复制单个文件大于5G 会报错 ,所以我么你这里选择copy()
    copy_source = {
        'Bucket': 'mybucket',
        'Key': 'mykey'
    }
    s3_resource.meta.client.copy(copy_source, 'newrbucket', 'new_file_key')
    
    
    • 最后用delete()方法删除原有文件.
    s3_resource.Object('my_bucket','old_file_key').delete()
    
  • 相关阅读:
    元组
    字典
    列表
    数据类型-字符串(str)
    python安装和首次使用
    javac++的stl解决重复的元素
    c++二分法求一个数的完全平方数
    双指针法----->求数组中两数之和
    java的二分法求一个数的平方根
    Java递归加上二分搜索将有序数组转化为平衡二叉树2
  • 原文地址:https://www.cnblogs.com/crazyzero/p/11384308.html
Copyright © 2011-2022 走看看