📑
S3バケットのCSVファイルをUTF-8に変換しS3バケットに格納するLambda関数
書いていること
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