【问题标题】:Convert .txt to .csv with AWS Lambda function使用 AWS Lambda 函数将 .txt 转换为 .csv
【发布时间】:2021-04-23 06:23:03
【问题描述】:

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

我使用下面的代码创建了一个 Lambda 函数并设置了 S3 触发器。我按照blog 中的步骤进行操作,以便导入 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!')
       }

【问题讨论】:

  • pandas 包不是 Python 的一部分。就像在您安装它 (pip install pandas) 之前它在您的笔记本电脑上不可用一样,它也不适用于您的 Lambda 函数。但是......无论如何,您可能不应该在对延迟敏感的环境(例如 Lambda)中使用 pandas。这是巨大的和矫枉过正。使用标准 Python csv module

标签: python pandas amazon-web-services csv aws-lambda


【解决方案1】:

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

您还需要在您的 lambda 部署包中捆绑 pandas 或使用 pandas layer 为您的函数提供 pandas 库。

【讨论】:

  • 正确答案。此外,我宁愿将pandas 全部删除。使用 Python 标准库可以轻松读取和写入 CSV。浪费精力将 Pandas 放入 Lambda(层)等。
猜你喜欢
  • 1970-01-01
  • 2017-03-19
  • 2019-10-20
  • 2020-03-01
  • 2021-06-05
  • 2022-01-28
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多