PythonでS3上のにある2つのファイルを結合する
Pythonを使って、S3上にある2つのファイルを結合して出力する。目的としては、ヘッダーのないcsvファイルにヘッダーをつける。 pandasを使って読み込むと余計なオーバーヘッドがあるので、StringIOでメモリ上に乗せてくっつけるだけにする。
サンプルコードは以下の通り
import boto3 import io # define args src_bucket = "src_bucket" src_prefixKey_header = "hoge/hoge_header.csv" src_prefixKey_data = "hoge/hoge_data.csv" dest_bucket = "dest_bucket" dest_prefixKey = "hoge/hoge_out.csv" SRC_FILE_ENCODING="utf-8" s3 = boto3.resource('s3') #ヘッダファイルの読み込み src_obj_header = s3.Object( src_bucket, src_prefixKey_header ) body_in_header = src_obj_header.get()['Body'].read().decode( SRC_FILE_ENCODING ) buffer_in_header = io.StringIO(body_in_header) #データファイルの読み込み src_obj_data = s3.Object( src_bucket, src_prefixKey_data ) body_in_data = src_obj_data.get()['Body'].read().decode( SRC_FILE_ENCODING ) buffer_in_data = io.StringIO(body_in_data) # ヘッダとデータの結合 outputs = list() outputs.append(buffer_in_header) outputs.append(buffer_in_data) buffer_out=io.StringIO() buffer_out.write(''.join([i.getvalue() for i in outputs])) body_out=buffer_out.getvalue() #ファイル配置 dest_obj = s3.Object( dest_bucket, dest_prefixKey ) dest_obj.put(Body = body_out)
参考URL
S3バケット上のCSVファイルをバッファに読み出してpandasで編集する | DevelopersIO
concatenation - python how to concat stringio objects? - Stack Overflow