python - 使用 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!')
}
解决方案
您的代码是无效的 lambda 函数。您需要一个lambda 处理程序,它是您的函数的入口点。
此外,您需要捆绑pandas
lambda 部署包或使用pandas 层为您的函数提供 pandas 库。
推荐阅读
- configuration - 在 influxdb 中收集 jmeter 从属指标
- sql - 选择一列中的值不同、其他列值相似且日期列值正确的行
- c++11 - 为算术类型和指针定义一个通用模板 C++ 类
- c# - 如何在 C# 中序列化没有属性的 XML 重复标记
- arrays - 如何从 matlab 中的 7x1 矩阵中提取第 1、第 3 和第 6 个元素并将它们存储在新矩阵中?
- c# - 如何调用 flowLayoutPanel 以通过名称删除按钮控件,该控件嵌套在同一个 flowLayoutPanel 中
- javascript - 如何显示进度状态然后使用js自动页面重定向?
- flutter - 使用不包含 Bloc 类型的 Bloc 的上下文调用 BlocProvider.of()
- python - 离散余弦变换 (DCT) 系数分布
- autohotkey - 为什么我的关联数组的键是对字符串的引用而不是字符串本身?