一旦バイナリで読んだあと、chardetを使ってエンコードを調べるのはどうでしょうか。
pip install chardet
でインストールする必要がありますが、以下のようにすれば、自動でエンコードを判定して読み込むことができます。
python
1import csv
2import chardet
3import io
4
5# csv_file_name="test_utf8.csv"
6csv_file_name="test_sjis.csv"
7
8with open(csv_file_name, "rb") as csv_file:
9 binary = csv_file.read()
10 ret_dict = chardet.detect(binary) # 文字コードを判定
11 print(ret_dict) # 判定した文字コードなどの情報を出力
12 reader = csv.DictReader(io.StringIO(binary.decode(ret_dict['encoding']))) # 判定した文字コードでエンコード
13 for line in reader:
14 print(line)
実行結果
bash
1$ python read_csv_with_chardet.py
2{'encoding': 'SHIFT_JIS', 'confidence': 0.99, 'language': 'Japanese'}
3{'カタカナ列': 'テスト', 'ひらがな列': 'てすと', '漢字列': '試験'}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/11 08:55