aws lambda逐行读取并写入文件

时间:2018-12-14 16:12:56

标签: python amazon-web-services amazon-s3 aws-lambda readlines

如何使用AWS lambda和python将文件处理步骤中的结果写回到文件中? 我正在从S3中读取文件,并在每行中寻找特殊的表达。如果包含此表达式,我将操纵该行。由于lambda无法写入文件(或S3不允许这样做),如何收集行转换的结果并将所有转换后的行写入文件? 代码如下:

import boto3
import botocore

s3 = boto3.resource('s3')
s3 = boto3.client('s3')

def lambda_handler(event, context):

bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']

obj = s3.get_object(Bucket=bucket, Key=key)

for line in obj['Body'].read().decode('utf-8').splitlines():
    if 'PCSI' in line:
        newLine = line \
        .replace('E','') \
        .replace('--','') \
        .replace('<',';') \
        .replace('>','') \
        .replace('9_PCSI','') \
        .replace('[','') \
        .replace('|',';') \
        .replace(']',';') \
        .replace(' ','')

当我打印结果时,它可以很好地工作并为我提供所需的每一行的格式。

我的一个主意是将其写入lambda的/ tmp文件夹中的文件:

newFile = open('/tmp/pcsi.txt','a')

并修改类似的代码

...
if 'PCSI' in line:
    newFile.write(line \
    .replace(.....

但是我不知道这是否有效,因为我无法“看到” / tmp中的文件。我也很难将其再次下载到S3。有没有一种方法可以将每一行写入文件并将其存储到S3?

1 个答案:

答案 0 :(得分:1)

您在那儿。您已经从s3中读取了对象,并根据需要对其进行了操作。现在,您必须将其写入s3,以便您在lambda函数中所做的修改会反映在s3中。

这可以通过

完成

在这里,使用put_object看起来像

client.put_object(Body=manipulated_object, Bucket=bucket, Key=key)