python - 将 openpyxl 与 lambda 结合使用

标签 python amazon-s3 aws-lambda openpyxl python-os

这里是Python新手。我有一个要求,我已经研究了几天了。要求如下。

我有一个 S3 位置,其中几乎没有包含未格式化数据的 Excel 工作表。我正在编写一个 lambda 函数来格式化它们并将其转换为 csv 格式。现在我已经有了这方面的代码,但它可以在本地计算机上运行,​​我从本地目录中选择 excel 文件,格式化/转换它们并将它们放入目标文件夹。我们使用 openpyxl 包进行转换。现在我正在将其迁移到AWS,但问题来了。源和目标将不是本地目录,而是 s3 位置。

数据转换逻辑太长了,我真的不想重写它们。

有没有一种方法可以像我们在本地计算机中一样处理这些 Excel 文件。

例如,

wb = openpyxl.load_workbook('C:\User\test.xlsx, data_only=True)

如何使用 python 重新创建此语句或它在 lambda 中的作用?

最佳答案

您可以使用 BytesIO 执行此操作,如下所示:

file = readS3('test.xlsx') # load file with Boto3
wb = openpyxl.load_workbook(BytesIO(file), data_only=True)

随着 readS3() 的实现,例如:

import boto3

bucket = #bucket name

def readS3(file):
    s3 = boto3.client('s3')
    s3_data = s3.get_object(Bucket=bucket, Key=file)
    return s3_data['Body'].read()

像这样配置 Boto3: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html

关于python - 将 openpyxl 与 lambda 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69195919/

相关文章:

python - 在 Python 中使用 requests.Session() 作为上下文管理器来处理可变数量的连续请求

amazon-web-services - AWS EFS 与 EBS 与 S3(差异和何时使用?)

amazon-web-services - 在 AWS Elemental Mediaconvert 中将纵向视频转换为横向

aws-lambda - DynamoDB - 排序键属性名称

python - 如何编写 python 脚本来向 Azure DevOps REST API 进行身份验证并获取访问 token ?

python - 将数据帧字符串列分为两列 : one with multiple text words, 和一个数字量

c# - 无法使用 Amazon SES .NET SDK 发送电子邮件

amazon-web-services - AWS 放大 : AmplifyException 'You are not authorized to make this call.'

javascript - AWS Lambda 调用函数并不总是返回

python - Tornado 中的局部变量作用域(python)