我正在使用Python创建一个lambda函数,用于在s3存储桶中创建一个文件,但它只创建了一行。需要基于迭代进行创建。

9 浏览
0 Comments

我正在使用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个记录。

0
0 Comments

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')

你也可以参考这个问题,其中有关于你的情况的有用答案。

0