AWS лямбда читать построчно и записывать в файл - PullRequest
0 голосов
/ 14 декабря 2018

как я могу записать свои результаты из шага обработки файла с помощью AWS lambda и python обратно в файл?Я читаю файл из S3 и ищу специальные выражения в каждой строке.Если это выражение включено, я манипулирую строкой.Поскольку лямбда не может записать в файл (или 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(' ','')

, когда я печатаю результаты, он работает нормально и дает мне формат каждой строки, которую я хочу.

Одна идея, которую я имел, состояла в том, чтобы записать в файлв папке / tmp lambda:

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

и измените код, например

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

, но я не знаю, работает ли это, поскольку я не могу «увидеть» файл в/ TMP.Я также пытался загрузить его снова на S3.Есть ли способ записать каждую строку в файл и сохранить его на S3?

1 Ответ

0 голосов
/ 14 декабря 2018

Вы на полпути.Вы прочитали объект из s3 и изменили его по своему требованию.Теперь вы должны записать его в s3, чтобы изменения, сделанные вами в лямбда-функции, были отражены в s3.

Это может быть выполнено с помощью

Здесь использование put_object будет выглядеть как

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