Python Lambda中换行符设为环境变量后无法正常分割CSV数据
解决Python Lambda中环境变量分隔符转义问题
问题核心:Terraform中直接设置source_line_delimiter = "\n"时,实际传入Lambda环境变量的是字面量字符串\n(由反斜杠和n两个字符组成),而非转义后的换行符。Python读取后用这个字符串分割CSV,自然无法识别为换行,导致结果只有一行。
以下是两种无需分支判断的通用解决方法:
方法一:Python端解析转义字符串
利用Python内置工具将字面量字符串转换为实际的转义字符,支持所有常见转义格式:
用ast.literal_eval()(推荐)
import os import ast # 读取并解析环境变量 source_line_delimiter = ast.literal_eval(os.getenv('source_line_delimiter', '\n')) # 直接用该变量分割CSV数据 lines = csv_data.split(source_line_delimiter)
用Unicode转义解码
import os source_line_delimiter = os.getenv('source_line_delimiter', '\n').encode().decode('unicode-escape')
方法二:Terraform端传入实际换行符
修改Terraform配置,直接传入对应ASCII码的换行符,避免字面量问题:
environment = { variables = { destination_bucket_name = "xxx-${terraform.workspace}", source_line_delimiter = chr(10), # chr(10)对应ASCII换行符\n target_line_delimiter = chr(10), source_column_seperator = ",", target_column_seperator = "," } }
此时Lambda读取到的环境变量就是实际的换行符,无需额外处理即可直接用于分割。
内容的提问来源于stack exchange,提问作者Ross Bush
相关产品推荐
相关产品推荐

