首页 > 解决方案 > 使用 AWS Lambda 函数将 .txt 转换为 .csv

问题描述

我正在尝试创建一个 Lambda 函数,只要将 .txt 文件放入存储桶“testinput”(私有存储桶)中就会触发该函数,将其从 .txt 文件(带有管道分隔符)转换为 .csv 文件,然后然后将该转换后的文件放入存储桶“testoutput”(私有存储桶)中。

我使用下面的代码创建了一个 Lambda 函数并设置了 S3 触发器。我按照这个博客中的步骤来导入 Pandas。但是,当我将文件“pipedelimitedtest”放入“testinput”时,什么也没发生。

这让我相信我用于将 .txt 文件转换为 .csv 文件的代码有问题。

如果有人可以深入了解我的代码具体有什么问题,或者如果有更简单的方法来解决这个问题,我将不胜感激。

更新:我根据 Marcin 的有用反馈更改了脚本,并在函数中添加了 pandas 层。但是,当我测试函数时,我现在收到错误:无法导入模块“lambda_function”:没有名为“pandas”的模块。

import boto3
import io
import pandas as pd
import json

def lambda_handler(event, context):
    s3 = boto3.client('s3')
    obj = s3.get_object(Bucket='lambdatestinput985', Key='Pipedelimitedtest.txt')
    df = pd.read_csv(io.BytesIO(obj['Body'].read()))

    csv_buffer = StringIO()
    df.to_csv (csv_buffer)
    
    s3_resource = boto3.resource('s3')
    s3_resource.Object(Bucket, 'df.csv').put(Body = csv_buffer.getvalue())

    return {
           'statusCode': 200,
           'body': json.dumps('Hello from S3 events Lambda!')
       }

标签: pythonpandasamazon-web-servicescsvaws-lambda

解决方案


您的代码是无效的 lambda 函数。您需要一个lambda 处理程序,它是您的函数的入口点。

此外,您需要捆绑pandaslambda 部署包或使用pandas 层为您的函数提供 pandas 库。


推荐阅读