You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改AWS Lambda实现CSV转指定JSON并移除临时文件

修改后的AWS Lambda代码实现
import json
import csv
import io
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # 从S3触发事件中获取桶名和文件键(根据实际触发源调整逻辑)
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    
    # 直接在内存中读取S3文件内容,无需临时文件
    s3_response = s3.get_object(Bucket=bucket, Key=key)
    raw_csv = s3_response['Body'].read().decode('utf-8')
    
    # 用内存流包装CSV内容,供DictReader解析
    csv_stream = io.StringIO(raw_csv)
    dict_reader = csv.DictReader(csv_stream)
    
    # 实现数值类型自动转换逻辑
    def parse_value(raw_str):
        try:
            return int(raw_str)
        except ValueError:
            try:
                return float(raw_str)
            except ValueError:
                return raw_str.strip()
    
    # 生成带类型转换的对象数组
    formatted_result = []
    for row in dict_reader:
        processed_row = {header: parse_value(value) for header, value in row.items()}
        formatted_result.append(processed_row)
    
    return {
        'statusCode': 200,
        'body': json.dumps(formatted_result, indent=2)
    }

核心修改说明

  • 移除临时文件依赖:直接通过s3.get_object获取文件字节流,解码后用io.StringIO包装成内存流,全程在内存中完成CSV解析,彻底删除临时文件相关的读写逻辑。
  • 转换为对象数组:使用csv.DictReader自动将CSV表头作为字典键,每行数据对应为键值对,直接生成符合需求的对象结构。
  • 数值类型修正:自定义parse_value函数,依次尝试将字符串转换为整数、浮点数,转换失败则返回清理后的原字符串,保证数值类型准确。
  • 触发事件适配:代码默认适配S3上传触发事件,若使用API Gateway等其他触发方式,需调整bucket和key的获取逻辑。

额外优化提示

  • 若CSV使用非UTF-8编码,需修改decode方法的参数(如gbk)。
  • 处理超大CSV文件时,可改用逐行流式解析,避免内存溢出。
  • 可扩展parse_value函数,添加日期格式转换等自定义类型处理逻辑。

内容的提问来源于stack exchange,提问作者bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:42:09