如何使用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?
答案 0 :(得分:1)
您在那儿。您已经从s3中读取了对象,并根据需要对其进行了操作。现在,您必须将其写入s3,以便您在lambda函数中所做的修改会反映在s3中。
这可以通过
完成在这里,使用put_object看起来像
client.put_object(Body=manipulated_object, Bucket=bucket, Key=key)