python-3.x 无法从名称中有特殊字符的s3存储桶复制文件

s71maibg  于 2023-01-06  发布在  Python
关注(0)|答案(1)|浏览(114)

我必须将文件从一个S3存储桶复制到另一个。在S3存储桶的名称中有一些特殊字符限制它显示为单个文件名。当从存储桶中获取列表时,我们能够获得文件名,但在复制时,我们得到文件未找到错误。(在复制时,它将读取文件名,但由于特殊字符无法读取。)

  • 我正在使用的代码:*
def copy_object():
    s3 = boto3.client('s3', region_name='us-east-1')
    response = s3.list_objects_v2(Bucket=os.environ.get('bucket'), Prefix='v2/abc/date='+date)
    for s3_objects in response["Contents"]:
        key = str(s3_objects["Key"]).split("/")[4]      #this will give file name
        print(key)
        
        copy_source = {
            'Bucket': os.environ.get('bucket'),
            'Key': key
        }
        s3_dist = boto3.resource(
            service_name=os.environ.get('serviceName'),
            region_name=os.environ.get('regionName'),
            aws_access_key_id=os.environ.get('awsAccessKeyId'),
            aws_secret_access_key=os.environ.get('awsSecretAccessKey')
        )

        ack = s3_dist.meta.client.copy(copy_source, 'dest_bucket', file_to_copy)

文件名:Stat@2022-12-28@nameflyer@@_1672185644223109701__i-008f78f00fd9d9bfb.parquet

  • 复制文件时获取错误:*
{'Error': {'Code': '404', 'Message': 'Not Found'},

我们如何读取文件复制在s3桶与特殊字符或有没有办法省略特殊字符和读取文件在桶。

erhoui1w

erhoui1w1#

您必须将您的Prefix添加到密钥名称中:

key='v2/abc/date='+date + '/' + key

相关问题