【发布时间】:2018-12-14 16:12:56
【问题描述】:
如何使用 AWS lambda 和 python 将文件处理步骤的结果写回文件? 我正在从 S3 读取一个文件并在每一行中寻找一个特殊的表达方式。如果包含此表达式,我将操作该行。由于 lambda 无法写入文件(或 S3 不允许这样做),如何收集行转换的结果并将所有转换的行写入文件? 代码如下所示:
import boto3
import botocore
s3 = boto3.resource('s3')
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
obj = s3.get_object(Bucket=bucket, Key=key)
for line in obj['Body'].read().decode('utf-8').splitlines():
if 'PCSI' in line:
newLine = line \
.replace('E','') \
.replace('--','') \
.replace('<',';') \
.replace('>','') \
.replace('9_PCSI','') \
.replace('[','') \
.replace('|',';') \
.replace(']',';') \
.replace(' ','')
当我打印结果时,它工作正常,并为我提供了我想要的每一行的格式。
我的一个想法是写入 lambda 的 /tmp 文件夹中的文件:
newFile = open('/tmp/pcsi.txt','a')
并修改代码
...
if 'PCSI' in line:
newFile.write(line \
.replace(.....
但我不知道这是否有效,因为我无法“看到”/tmp 中的文件。我也很难将它再次下载到 S3。有没有办法将每一行写入文件并将其存储到 S3?
【问题讨论】:
-
Lambda 能够写入 S3 存储桶,您只需使用
boto3并进行适当的 IAM 设置。 -
另一种方法是简单地将文件下载到
/tmp。然后你可以像普通文件一样阅读它并做任何你想做的事情。如果您希望将修改后的文件保存回 S3,只需写入本地文件,然后将其上传到 S3。 -
下载将无法正常运行,一切都应在 AWS 中运行,无需本地 PC
标签: python amazon-web-services amazon-s3 aws-lambda readlines