我正在使用Python创建一个lambda函数,用于在s3存储桶中创建一个文件,但它只创建了一行。需要基于迭代进行创建。
我正在使用Python创建一个lambda函数,用于在s3存储桶中创建一个文件,但它只创建了一行。需要基于迭代进行创建。
我正在使用Python创建一个AWS Lambda函数,用于在S3存储桶中创建一个文件,但它只创建了一行。需要基于迭代的创建。
以下是我的代码:
import json import boto3 s3 = boto3.client('s3') def lambda_handler(event, context): bucket ='xyz' for i in range(5): eventToUpload = {} eventToUpload['ITEM_ID'] = 1234 eventToUpload['Name'] = 'John' eventToUpload['Office'] = 'NY' fileName = f'testevent{i}.json' uploadByteStream = bytes(json.dumps(eventToUpload).encode('UTF-8')) s3.put_object(Bucket=bucket, Key=fileName, Body=uploadByteStream) print('Put Complete')
以上代码会在S3存储桶中创建一个json文件,但我希望迭代5次,以便文件有5个记录。
AWS S3默认情况下不支持向现有文件追加内容。为了解决这个问题,可以采取以下两种方法之一:
1. 在Python脚本中循环遍历events
,并使用一个唯一标识的fileName
前缀/后缀创建多个文件。例如,可以使用ITEM_ID
作为文件名的一部分。
import boto3 s3 = boto3.client('s3') events = [event1, event2, event3] # Your list of events for event in events: fileName = f"{event['ITEM_ID']}_file.txt" # Unique file name based on ITEM_ID s3.put_object(Body=event['content'], Bucket='your-bucket', Key=fileName)
2. 如果有现有文件,可以先读取并解析该文件,然后将events
追加到文件中,并写入/替换该文件。
import boto3 s3 = boto3.client('s3') existing_file = s3.get_object(Bucket='your-bucket', Key='existing_file.txt') existing_content = existing_file['Body'].read().decode('utf-8') events = [event1, event2, event3] # Your list of events new_content = existing_content + '\n' + '\n'.join([event['content'] for event in events]) s3.put_object(Body=new_content, Bucket='your-bucket', Key='existing_file.txt')
你也可以参考这个问题,其中有关于你的情况的有用答案。