【Google Drive】のテキストファイルの文字コードを判定【Google Colab】

#python3

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

    //コードセルに↓

        #detect_encode.

import pathlib
import chardet

       #パラメタ設定.
ファイル指定 = '*.txt'
#ファイル指定 = '**/*.txt'  #再帰探索
フォルダ = '/content/drive/MyDrive'

       #PATHオブジェクト群からFILEオブジェクト群へ.
path_objects = pathlib.Path(フォルダ)
[each.close() for each in file_objects].clear() if 'file_objects' in globals() else []
file_objects = [each.open(mode='rb') for each in path_objects.glob(ファイル指定)]

       #メイン.
結果 = [
   '{0}: {1[encoding]}: {1[confidence]}\n'.format(
       each.name, chardet.detect(each.read(4096)))
   for each in file_objects]

       #FILEオブジェクト群、閉じる.
[each.close() for each in file_objects].clear()

       #出力.
print(''.join(結果))
"""
outfile.close() if 'outfile' in globals() else None
outfile = open('/content/drive/MyDrive/outfile.txt', 'w')
outfile.writelines(results)
outfile.close()
"""

4096は読み込みバイト数。
判定結果に Noneが多かったら増やしてみて…もな~んかあんまり変わらない気が^^

一方、ワンライナーは fileコマンドで…と思ったら Colab上では見つからない。
調べたら chardetモジュールがインストールされると chardetectコマンドというものが使えるらしい。

    //ワンライナー↓

!chardetect /content/drive/MyDrive/*.txt

コマンドでは読み込みバイト指定ができないぶん相対的に遅…くもないな。
全部読み込んでいるわけでもないようだ。
4KBくらいか?(とゆーかコマンドの判定速度に合わせてスクリプトの読み込みバイト数を4KBにした^^)。

    //Google Colaboratory↓


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