【Python】複数CSVファイルの文字コードをUTF-8からShift-JIS(シフトJIS)に一括変換してメモ帳やExcelでの文字化けを防ぐ【Googleフォーム】

ZOOMで会議や講義、研修などを行うことが多くなるにつれてGoogleフォームを利用する機会が増えてきました。ところが、Googleフォームの回答結果をCSVファイルでダウンロードしてExcelで編集しようとすると、文字化けしているんですよね。メモ帳やExcelで開いてみると、以下のように完全に文字化けしています。

この記事では文字コードを変更して文字化けを防ぐ方法を丁寧に解説します。

CSVファイル文字化けの原因

文字化けの原因は文字コードがUTF-8という文字コードだからです。メモ帳やExcelで文字化けしないためにはUTF-8をShift-JISという文字コードに変換する必要があります。

1つのCSVファイルの文字コードを変えるのは簡単!

1つのCSVファイルの文字コードを変えるのは簡単です。CSVファイルをメモ帳で開き、文字コードをANSIに変えるだけです。

ここで、「ANSI?Shift-JISじゃないの?」という疑問はもっともです。

WindowsPCではANSI=CP932=Shift-JISと解釈する

厳密には違うのですが、WindowsPCではANSI=CP932=Shift-JISと考えておけば問題ありません。CP932はどこで使うかというと、実はPythonでCSVファイルの変換を行う際にはCP932を使います。

Pythonで複数のCSVファイルの文字コードをUTF-8からShift-JISに一括変換!

まず、準備としてカレントディレクトリ(現在のフォルダ)にディレクトリを2つ準備します。わかりやすくディレクトリ名を「UTF-8」「Shift-JIS」とでもしましょう。そして、ここがポイントなのですが、両方のディレクトリに文字化けしているCSVファイルを入れておきます。以下のコードのようにすれば、CSVファイルが何個でも問題ありません。今回は以下のように一気に16個のCSVファイルを変換します。

同名のファイルが「UTF-8」「Shift-JIS」というディレクトリに入っています。
それではコードを示します。手順としては、「UTF-8」ディレクトリ内のファイルを読み取り、「Shift-JIS」ディレクトリ内の同名ファイルに書き込んだうえで文字コードをShift-JISに変換します。これをfor文でファイル数分繰り返します。

#必要なモジュールをインポート
import glob
from pathlib import Path

#UTF-8、Shift-JISディレクトリへのパス
path_u = Path("./UTF-8")
path_s= Path("./Shift-JIS")

#それぞれのディレクトリで「.csv」が入っている名前のファイルを取得
ufiles = list (path_u.glob("*.csv"))
sfiles = list (path_s.glob("*.csv"))

#UTF-8とShift-JISフォルダの同名ファイルを辞書形式のペアデータとする
files_dict = dict(zip(ufiles,sfiles))

#UTF-8ディレクトリ内のCSVファイルの中身をShift-JISディレクトリ内の同名ファイルに書き込み変換。
#複数ファイルにも対応するようにfor文で書く。cp932=Shift-JIS。replaceはエラーとなった文字を?に置き換え。
for ufile,sfile in files_dict.items():#.items()は辞書形式のデータでfor文をまわす際によく利用します。
    with open(ufile, encoding='utf-8',errors='replace') as fin:
        with open(sfile, 'w', encoding='cp932',errors='replace') as fout:
            fout.write(fin.read())

 
このコードを実行すると一気に16個のCSVファイルがShit-JISに変換されました。Shift-JISディレクトリ内のファイルをExcelで開いてみましょう。

やりましたね!文字化けが一気に解決されました。
ということで、今回はCSVファイルの文字コードをUTF-8からShift-JISに変換する方法を紹介しました。ここまでを読んでいただきありがとうございました!

スポンサードリンク
おすすめの記事