[Python] S3上のCSVファイルの文字コードを取得する

Pythonでファイルの文字コードを取得する方法です。

経緯

S3のファイルを読み込む時にデコードする必要があるのですが、文字コードがJ-JISだったりUFT-8だったりするので、文字コードを取得して分岐処理することにしました。

S3に格納されているファイルを読み込む(参考)

LambdaからS3のファイルを直接読み書き(Python)

対応

コード

import chardet

# S3からファイル取得
client = S3Client()
object = client.get_object(S3上のパス)
body = object["Body"].read()

# 文字コードの判定
if chardet.detect(body).get("encoding") == "utf-8":
    # UTF-8
    body = io.TextIOWrapper(io.BytesIO(body))
else:
    # UTF-8以外
    body = io.TextIOWrapper(io.BytesIO(body),encoding="cp932")

body.seek(0)
....

chardetを使えば、読み込んだファイル情報を取得することが出来ます。

読み込んだ情報にある、encoding に文字コードが入っています。