【发布时间】: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