LoginSignup
0
7

More than 3 years have passed since last update.

ExcelファイルをJSONに一括変換【Python】

Last updated at Posted at 2020-01-23

注意:Python初心者のメモです。

Pythonの excel2json というプラグインを使用して xlsxJSON に変換した。

excel2json の機能は限られていて、ただ Excel データを JSON に変換するだけ。ドキュメントには変換する方法しか書いてないので、設定も特になさそう。

参考サイト先にもあるとおり Pandas を使う方法もあったが、今回は変換方法をよしなにして欲しかったため excel2json を使ってみた。あと整数は浮動小数点数に変換されるらしい。ぜひ以下のサイトもご覧ください。

参考:
- Python Excel to JSON Conversion - JournalDev
- excel2json-3 · PyPI(Excel to JSON Converter)

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 固定になる。

参考:
- pythonでフォルダ内のファイル名のみ取得する方法
- Pythonメモ : haloでターミナルにスピナー(処理中)を表示

0
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
7