注意:Python初心者のメモです。
Pythonの excel2json
というプラグインを使用して xlsx
を JSON
に変換した。
excel2json
の機能は限られていて、ただ Excel データを JSON に変換するだけ。ドキュメントには変換する方法しか書いてないので、設定も特になさそう。
参考サイト先にもあるとおり Pandas
を使う方法もあったが、今回は変換方法をよしなにして欲しかったため excel2json
を使ってみた。あと整数は浮動小数点数に変換されるらしい。ぜひ以下のサイトもご覧ください。
参考:
import excel2json
xlsx_path = 'C:/Users/username/Documents/xlsx_files/hoge.xlsx'
excel2json.convert_from_file(xlsx_path)
# --> C:/Users/username/Documents/xlsx_files/Sheet1.json が出力される
Excel のシート名がそのまま出力ファイル名になる。出力ファイル名指定は正直欲しかった。この仕様は限られた用途にしか使えないかも……
ファイル群を一括変換!!
Tobiiっていう視線解析ソフトからExcelファイルを書き出せて、視線データを自分のプログラムで解析したかった。なのでソフトから出力した複数の Excel ファイル群を一斉に JSON に変換したかった。一応、一斉変換のコードも置いておく。
ループさせて複数のファイルを変換するとき、作成された JSON ファイルを常に上書きしようとするので(名前が同じ)、毎回 Rename する必要がある。シートが複数ある場合は Sheet2.json
とかが出てくるので対策が必要。
私の場合、 Data
という名前のシートが1つだけだったので仕様としては十分。
import excel2json
import pathlib
import os
from halo import Halo
from shutil import move
spinner = Halo(spinner='dots') # loading画面のぐるぐる
path = 'C:/Users/username/Documents/xlsx_files' # xlsxファイル群が入ってるpath
xlsx_files = list(pathlib.Path(path).glob('*.xlsx')) # xlsxファイル群のリストを作る
for i in xlsx_files:
xlsx_path = '%s/%s' % (path, i.name) # xlsxファイルのpathと名前
json_path = '%s/output/%s.json' % (path, i.name[:-5]) # jsonファイルの出力先path
if os.path.exists(json_path): # 既にjsonファイルがあればスキップ
print('Skip to %s' % i.name)
else:
try:
spinner.start('Converting: %s' % i.name)
excel2json.convert_from_file(xlsx_path) # jsonに変換
except Exception as inst: # 変換失敗
spinner.fail(inst)
else: # 変換成功
move('%s/Data.json' % path, json_path) #Data.jsonをRenameして移動
spinner.succeed('Success: %s.json' % i.name[:-5])
※ 出力先のフォルダ(outputフォルダ)は先に作っておかないと怒られる(それはそう)。
※ TobiiのソフトからExcelを出力すると、シート名は Data
固定になる。
参考: