【发布时间】:2021-07-17 16:41:39
【问题描述】:
我在 s3 存储桶中有几百个 PDF,我想要一个 lambda 函数来为我的所有 PDF 创建一个 zip 文件。
在我的本地 Python 上执行此操作显然很容易,我曾假设逻辑会以一种非常直接的方式转移到 AWS Lambda。但到目前为止,我还没有设法让这个工作。
我一直在使用 zipfile Python 库,以及 boto3。我的逻辑很简单,就是找到所有文件,将它们附加到“files_to_zip”列表中,然后遍历该列表,将每个文件写入新的 zip 文件。
然而,这引发了许多问题,我认为这是由于我对在 Lambda 中调用和加载文件的工作原理缺乏了解。
这是我目前尝试过的代码
import os
import boto3
from io import BytesIO, StringIO
from zipfile import ZipFile, ZIP_DEFLATED
def zipping_files(event, context):
s3 = boto3.resource('s3')
BUCKET = 'BUCKET NAME'
PREFIX_1 = 'KEY NAME'
new_zip = r'NEW KEY NAME'
s3_client = boto3.client('s3')
files_to_zip = []
response = s3_client.list_objects_v2(Bucket=BUCKET, Prefix=PREFIX_1)
all = response['Contents']
for i in all:
files_to_zip.append(str(i['Key']))
with ZipFile(new_zip, 'w', compression=ZIP_DEFLATED, allowZip64=True) as new_zip:
for file in files_to_zip:
new_zip.write(file)
我收到错误消息,例如我的 new_zip 字符串不存在 (FileNotFoundError),这是一个只读操作。
【问题讨论】:
标签: python amazon-web-services amazon-s3 aws-lambda