AWS лямбда удаляет ненужные строки текста - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть текстовый файл, который помещается в корзину s3 (bucket_name_1) , я хотел бы использовать AWS Lambda, чтобы удалить ненужные верхние и нижние колонтитулы в файле и записать его в другой файл. s3 bucket (bucket_name_2) .

Пример файла:

UNWANTED HEADER

UNWANTED HEADER

Date|FirstName|Surname|Age|
1/21/2020|JOHN|SMITH|45|
1/21/2020|EMMA|BROWN|29|
1/21/2020|FRANK|WILSON|37|
...


UNWANTED FOOTER

Пока у меня есть лямбда, которая будет читать файл в

import boto3

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

def lambda_handler(event, context):

    bucket_name_1 = event['Records'][0]['s3']['bucket']['name']
    bucket_name_2 = 'output-bucket'
    key = event['Records'][0]['s3']['object']['key']


    obj = s3.Object(bucket_name_1, key)

    body = obj.get()['Body'].read()
    print(body)

1 Ответ

1 голос
/ 06 февраля 2020

Я бы порекомендовал:

  • Загрузить файл в /tmp/, используя download_file()
  • Манипулировать файлом или скопировать нужные строки в 'output file'
  • Загрузить полученный файл на S3, используя upload_file()

Это будет примерно так:

import boto3

def lambda_handler(event, context):

    s3_client = boto3.client('s3')

    bucket_in = event['Records'][0]['s3']['bucket']['name']
    bucket_out = 'output-bucket'
    key = event['Records'][0]['s3']['object']['key']
    filename_in = '/tmp/in.txt'
    filename_out = '/tmp/out.txt'

    # Download file
    s3_client.download_file(bucket_in, key, filename_in)

    # Remove headers and footers
    with open(filename_in, 'r') as file_in:
        with open(filename_out, 'w') as file_out:
            for line in file_in:
                # Put logic here for including/excluding lines from source file
                file_out.write(line)

    # Upload output file
    s3_client.upload_file(filename_out, bucket_out, key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...