Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何在S3中重命名对象?_Amazon S3_Boto3 - Fatal编程技术网

Amazon s3 如何在S3中重命名对象?

Amazon s3 如何在S3中重命名对象?,amazon-s3,boto3,Amazon S3,Boto3,我在S3中有大约1000个对象,它们以 abcyearmonthday1 abcyearmonthday2 abcyearmonthday3 ... 要将其重命名为 abc/year/month/day/1 abc/year/month/day/2 abc/year/month/day/3 我怎么能通过这两种方式做到呢。有更简单的方法吗?没有直接的方法重命名S3对象。 需要执行以下两个步骤: 使用新名称在同一位置复制S3对象 然后删除旧对象 如中所述 您不能在S3中重命名对象,必须使用新名称

我在S3中有大约1000个对象,它们以

abcyearmonthday1
abcyearmonthday2
abcyearmonthday3
...
要将其重命名为

abc/year/month/day/1
abc/year/month/day/2
abc/year/month/day/3

我怎么能通过这两种方式做到呢。有更简单的方法吗?

没有直接的方法重命名S3对象。 需要执行以下两个步骤:

  • 使用新名称在同一位置复制S3对象
  • 然后删除旧对象
  • 如中所述

    您不能在S3中重命名对象,必须使用新名称复制对象,然后删除旧对象

    s3=boto3.resource('s3'))
    s3.对象('my_bucket'、'my_file_new')。从(CopySource='my_bucket/my_file_old'复制)
    s3.Object('my_bucket','my_file_old')。delete()
    
    我也遇到了同样的问题(在我的例子中,我想使用Redshift UNLOAD命令重命名在S3中生成的文件)。我解决了创建boto3会话,然后逐个文件复制删除文件的问题

    导入boto3
    session=boto3.session.session(aws\u access\u key\u id=my\u access\u key\u id,aws\u secret\u access\u key=my\u secret\u access\u key)。资源('s3')
    #在列表中保存文件名的元组(带前缀):[(旧文件路径,新文件路径),…,()]例如元组('prefix/old\u filename.csv000','prefix/new\u filename.csv'))
    s3_文件_to_重命名=[]
    s3_文件_to_rename.append((旧文件,新文件))
    对于s3\u文件中的配对\u至\u重命名:
    旧文件=对[0]
    新建_文件=对[1]
    s3_session.Object(s3_bucket_名称,新_文件)。从复制(CopySource=s3_bucket_名称+'/'+旧_文件)
    s3_session.Object(s3_bucket_名称,旧文件).delete()
    
    多余的问题。看看这个。