【发布时间】:2021-08-23 13:27:30
【问题描述】:
需要根据其名称将 Amazon S3 文件移动到名称相同的相应文件夹。这是针对 AWS 上的 python 中的自动化脚本。文件名加 1。
例如,一个叫my_file_section_a,然后下一个叫my_file_section_b1,然后下一个叫my_file_section_b2,以此类推。这些文件夹将被称为my_file_section_a、my_file_section_b1 等等。
代码如下:
from __future__import print_function
import boto3
import time, urllib
import json
print("*"*80)
print("Initializing...")
print("*"*80)
s3 = boto3.client('s3')
def lambda_handler(event, context):
source_bucket = event['Records'[0]['s3']['bucket']['name']
object_key = event['Records'][0]['s3']['object']['key']
target_bucket = 'myfilelambdadestination'
copy_source = {'Bucket': source_bucket, 'Key': object_key}
print("Source bucket: ", source_bucket)
print("Target bucket: ", target_bucket)
print("Log Stream name: ",context.log_stream_name)
print("Log Group name: ",context.log_group_name)
print("Request ID: ",context.aws_request_id)
print("Mem. limits(MB) ", context.memory_limit_in_mb)
try:
print("Using waiter to waiting for object to persist through s3 service")
waiter = s3.get_waiter('object_exists')
waiter.wait(Bucket=source_bucket, Key = object_key)
s3.copy_object(Bucket=target_bucket, Key = object_key, CopySource = copy_source)
return response['ContentType']
except Exception as err:
print("Error -" +str(err))
return e
如何将基于名称的文件移动到名称相同的文件夹中?
【问题讨论】:
-
仅供参考,您不需要使用服务员。 AWS Lambda 函数只会在对象创建后触发。
-
您的要求有点不清楚。你是说对象
foo应该被复制到foo/foo1,但是如果那个对象已经存在,那么它应该被复制到foo/foo2? -
每个文件都是独一无二的,因为它只有一种类型。例如,文件名为 my_file_section_a,然后是 my_file_section_a1。存在与文件具有相同名称的文件夹。它将仅根据其名称进行复制,而不会复制到其他文件夹中,例如 my_file_section_b。
-
请通过提供更多示例来阐明您的要求。你是说
foo应该转到foo/foo,而bar应该转到bar/bar? (以及为什么?) -
是的,文件名 foo 应该放在名为 foo 的文件夹中。一个名为 bar 的文件应该进入一个名为 bar 的文件夹。此外,这些文件按字母顺序递增,因此 foo_2 应放入名为 foo_2 的文件夹中。然后会有一个名为 goo 的文件,它应该进入一个名为 goo 的文件夹,然后是另一个名为 goo_2 的文件,它应该进入一个文件名 goo_2 等等。目标是将文件移动到同名的同一个文件夹中。原因是出于组织目的,文件不必手动移动到这些文件夹中。
标签: python amazon-web-services amazon-s3 aws-lambda boto3