Python API Gateway からCSVダウンロードする

Python Lambda で作ったカンマ区切り文字列を API Gateway 経由で CSVダウンロードする

API Gateway から Python ( Lambda ) で作成した カンマ文字列を CSV形式でダウンロードできるようにする方法です

Lambda 側で headersを指定して返せば どんなフォーマットでも返すことは可能です

CSVファイルを返す場合 ヘッダーは Content-TypeContent-disposition を使います

Python ( Lambda )コード例 ↓

def lambda_handler(event, context):
    body_str = """column1,column2,column3
"値1","値2","値3"
"""
    return {
        'statusCode': 200,
        "isBase64Encoded": True,
        "headers":{
            "Content-Type": "application/vnd.ms-excel",
            "Content-disposition": "attachment; filename=hoge.csv" # CSVファイル名を指定
        },
        "body": f"\ufeff{body_str}" # BOMを設定
    }

body_strという変数に、 カンマ区切り文字列を代入し

その値をCSVファイルとして ダウンロードできるように返しています

文字列の先頭に \ufeff を入れるのは、 BOMです

API Gateway のURLにアクセスすると、下のようにCSVファイル形式でダウンロードできました

body_str に代入したカンマ区切りの文字列

Python エラー local variable ‘name’ referenced before assignment

Python UnboundLocalError

Pythonで、 下のような UnboundLocalError (エラー)が出ました

local variable 'name' referenced before assignment

ローカル変数 ‘name’が、 割り当て前に参照されたということでした

エラーが出たコードは下↓です。

def hogehoge():
    print(name) #ここで UnboundLocalError
    name = ""   # ローカル変数 name 宣言が↓下
hogehoge()

hogehoge() 関数内で出ましたが、 下↓のように関数から出すとエラーは変化します。

print(name) #ここで NameError
name = ""   # 変数 name 宣言が↓下

上↑のコードの場合、 NameError になります。

name 'name' is not defined
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED