【Google Drive】のテキストファイルの文字コードを utf-8に変換【Google Colab】

#python3

GASでできそうだけど PCじゃないとスクリプトエディタが出てこないので Google Colabからドライブをマウントする。
ただし、Google Colabはタブレットても利用できるとはいえ、CTRLキーが打てる(ソフト)キーボードがないとキツいですが。
なお、変換できるのはテキストデータのファイル(txt, csv, jsonl, xml, md, py, js等)だけです。

    //コードセルに↓

        #encode_text.

       #パラメタ設定.
元ファイル = '/content/drive/MyDrive/sample.txt.sjis'
出力先 = '/content/drive/MyDrive/outfile.txt'
元コーディング = 'shift_jis'

       #ファイル開く.
file_object.close() if 'file_object' in globals() else None
file_object = open(元ファイル, 'r', encoding=元コーディング)
outfile.close() if 'outfile' in globals() else None
outfile = open(出力先, 'w')

       #メイン.
結果 = [line.rstrip('\r\n') + '\n' for line in file_object]

       #出力.
print(''.join(結果))
outfile.writelines(結果)

       #ファイル閉じる.
file_object.close()
outfile.close()

ただ単にファイルを開いて保存するだけだけど、ついでに改行コードも Windows用から LINUX用に置き換え。

    //こちらはワンライナー↓

!iconv -f SJIS /content/drive/MyDrive/sample.txt.sjis | sed -e 's,\r$,,' >/content/drive/MyDrive/outfile.txt

「ファイルひとつならエディタでいいよね」

そ、それはそうですが…そうだ! 郵便番号データとかドでかいファイルはスクリプトの方がいいですよ^^
まあ確かに変換するファイルが十や二十もある場合はこれじゃ困りますが、さりとて一旦 utf-8に移行したらもうめったに無いのよね。
なので一括変換はシェルスクリプトで。

前回のスクリプトで判定して結果をファイルに書き出すと、下記のような中身になってる。

/content/drive/MyDrive/python.txt: utf-8: 0.99
/content/drive/MyDrive/javascript.txt: utf-8: 0.99
/content/drive/MyDrive/tokyo_zip.txt: SHIFT_JIS: 0.99
/content/drive/MyDrive/osaka_zip.txt: SHIFT_JIS: 0.99
/content/drive/MyDrive/for_word.txt: CP932: 0.7795275590551181
/content/drive/MyDrive/for_excel.txt: CP932: 0.6105006105006106
・・・

上記のようなテキストからフィルタとエディタの置換機能で下記のようなシェルスクリプトを作ってセルマジックで実行する。
まずリネーム。

%%script bash
cd /content/drive/MyDrive/
mv ./tokyo_zip.txt tokyo_zip.txt.sjis
mv ./osaka_zip.txt osaka_zip.txt.sjis
・・・

このスクリプトからこれまたフィルタやエディタでスクリプトを作ってセルマジック。

%%script bash
cd /content/drive/MyDrive/
iconv -f SJIS ./tokyo_zip.txt.sjis | sed -e 's,\r$,,' >tokyo_zip.txt
iconv -f SJIS ./osaka_zip.txt.sjis | sed -e 's,\r$,,' >osaka_zip.txt
・・・

なお言うまでもないことだけど、読み出したファイルに直接(バックアップ無しに)書き込むのは厳禁ですぞ。

    //Google Colaboratory↓


この記事が気に入ったらサポートをしてみませんか?