前提・実現したいこと
s3 にあるファイルを文字コード変換して別オブジェクトとして保存したい。
発生している問題・エラーメッセージ
エラーにはならないものの、文字コードが utf-8 のままで変換が行われない。
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3import os 4import sys 5import codecs 6import boto3 7from io import StringIO 8 9def main(): 10 bucketname = 's3_bucket' 11 12 filepath = 'MONTHLY_DATA/2020/202002' 13 srcname = 'utf8_202002.csv' 14 dstname = 'cp932_202002.csv' 15 16 s3 = boto3.client('s3') 17 obj = s3.get_object(Bucket=bucketname, Key=os.path.join(filepath, srcname)) 18 body = obj['Body'] 19 20 encoded = codecs.encode(body.read().decode('utf-8'), 'cp932') 21 decoded = codecs.decode(encoded, 'cp932') 22 23 out_buffer = StringIO(decoded) 24 s3_resource = boto3.resource('s3') 25 s3_resource.Bucket(bucketname).put_object( 26 Key=os.path.join(filepath, dstname), 27 Body=out_buffer.getvalue(), 28 ContentEncoding='text/csv; charset=cp932' 29 ) 30
試したこと
python
1 src_codec = codecs.lookup("utf-8") 2 dst_codec = codecs.lookup("cp932") 3 stream = codecs.StreamRecoder( 4 StringIO(body.read().decode('utf-8')), 5 dst_codec.encode, src_codec.decode, 6 src_codec.streamreader, dst_codec.streamwriter 7 ) 8 reader = codecs.StreamReader(stream) 9 10 out_buffer = StringIO() 11 for line in reader.readline(): 12 out_buffer.write(line)
のようにもしてみましたが、readline のエラーが解消されず断念。
補足情報(FW/ツールのバージョンなど)
python のバージョンは 3.5 です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/05 07:57 編集