AWS Lambda Python - 将密钥复制到"folder"会创建嵌套"folders"。如何从监视中排除"folder"



这是我的第一篇帖子,所以我为任何不稳定之处道歉。我想做的是,将上传的文件复制到目标bucket,将该文件复制到源bucket中已处理的文件夹,然后删除原始文件。我需要排除已处理的文件夹,因为它正在从源文件夹复制并创建嵌套的已处理文件夹。但我在弄清楚如何排除该文件夹时遇到了问题。

import json
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = s3.Bucket('source-test-bucket-007')
dest_bucket = s3.Bucket('destination-test-bucket-008')
# Variables for processed key into the processed folder
new_bucket_name = 'source-test-bucket-007'

for obj in bucket.objects.all():
dest_key = obj.key
print('Keys :', obj.key)
s3.Object(dest_bucket.name, dest_key).copy_from(CopySource = {'Bucket': obj.bucket_name, 'Key': obj.key})
s3.Object(obj.bucket_name, obj.key).delete()
copy_source_back = {'Bucket': new_bucket_name, 'Key': obj.key}
s3.meta.client.copy(copy_source_back, new_bucket_name, 'processed/' + obj.key)

return {
'Status': 200,
'body': ('Test with no errors.')
}

如果我假设你说的是你想复制这样的东西:

key = 'processed/copythisfile.txt'

到一个新的桶,它显示为:

newkey = 'processed/processed/copythisfile.xt'

根据前缀(文件夹(的不同,如果进程是唯一被复制的文件夹,您可以把它排除在这一行之外吗:

s3.meta.client.copy(copy_source_back, new_bucket_name, 'processed/' + obj.key)

但如果你真的只想要文件名,你可以用[-1]分割密钥并获取最后一个元素

In [58]: key = 'processed/copythisfile.txt'
...:
In [59]: key.split('/')
...:
Out[59]: ['processed', 'copythisfile.txt']
In [60]: key.split('/')[-1]
...: 
...:
Out[60]: 'copythisfile.txt'

最新更新