📑

S3バケットのCSVファイルをUTF-8に変換しS3バケットに格納するLambda関数

2024/03/15に公開

書いていること

S3バケットに格納した文字コードがShift_JISのCSVファイルを読み込み、文字コードをUTF-8に変換しS3バケットにファイル出力するLambda関数(Python3.11)のサンプルスクリプトです。

構成図

01-input-sjis/フォルダ配下のCSVファイルの文字コードはShift_JISです。
02-haracter-encoding/フォルダ配下のCSVファイルの文字コードはUTF-8です。

スクリプト

Lambda関数のスクリプトです。

import boto3
import json

def lambda_handler(event, context):
    # S3 クライアントを初期化
    s3 = boto3.client('s3')

    # バケット名とディレクトリパスを指定
    bucket_name = 'hogefugabacket'
    directory_path = '01-input-sjis/'
    output_directory_path = '02-haracter-encoding/'

    # 指定されたディレクトリ内のすべてのオブジェクトをリストアップ
    response = s3.list_objects_v2(Bucket=bucket_name, Prefix=directory_path)

    # CSV ファイル名を抽出
    csv_files = [obj['Key'] for obj in response.get('Contents', []) if obj['Key'].endswith('.csv')]

    for csv_file in csv_files:
        print(csv_file)
        response = s3.get_object(Bucket=bucket_name, Key=csv_file)
        csv_string = response['Body'].read().decode('shift_jis')
        # Convert to UTF-8
        csv_string_utf8 = csv_string.encode('utf-8')
        # Put the UTF-8 encoded CSV back to S3
        output_key = output_directory_path + csv_file.split('/')[-1]
        s3.put_object(Bucket=bucket_name, Key=output_key, Body=csv_string_utf8)
        print(f"Converted and put {output_key} to S3.")

    return {
        'statusCode': 200,
        'body': json.dumps('Lambda DONE')
    }

Discussion