Python言語を使用して、エクセルファイルをJSONファイルへ変換するコードを作ってみました。
(ソースコードは一番下にあります)
試作品のため、重要なシステムやデータで使用するのはお控えください。
このプログラムは、以下の画像のような複数シートを有するエクセルファイルをJSONファイルに変換することを想定しています。
上記画像では、3つのシートを有するエクセルファイルを示しました。
各シートには、それぞれ1つの表形式のデータが含まれています。
それらの行および列の項目がJSONファイルのキーとし、
さらに、各々のシートのシート名をキーとして、各々の表を1つのデータとする
ネスト構造のJSONファイルを作ることができます。
それでは、実際のPythonコードを以下に示します。
- import pandas as pd
- import json
- import numpy as np
- from openpyxl import load_workbook
- import os
- # このプログラムはエクセルの表をJSONファイルに変換するためのものです
- def xl_to_nest_json(excel_file = ‘test_xl_file.xlsx’):
- #シートの枚数を確認するためのコード
- #エクセルファイルを読み込み
- input_file = pd.ExcelFile(excel_file)
- # ファイル名を取得する
- data_name = os.path.splitext(excel_file)[0]
- #シート名を格納
- input_sheet_name=input_file.sheet_names
- #シートの枚数を確認
- sheets_num=len(input_sheet_name)
- #データ格納先を定義
- df = [0] * sheets_num
- json_data = [0] * sheets_num
- for i in range(sheets_num):
- df[i] = pd.read_excel(excel_file, sheet_name=input_sheet_name[i], index_col=0)
- # データフレームを変換
- json_data[i] = df[i].to_json(indent=4)
- # ネスト用のデータフレームを作る
- dff = pd.DataFrame([[json_data[i] for i in range(sheets_num)]],
- columns=[‘{}’.format(input_sheet_name[i]) for i in range(sheets_num)],
- index=[‘json’])
- dff_data = dff.to_json(indent=4)
- # JSONデータの書き出し
- output = ‘{}.json’.format(data_name)
- with open(output, ‘w’) as f:
- json.dump(dff_data, f)
- def load_json(file):
- # json.load関数を使ったjsonファイルの読み込み
- with open(file) as f:
- df = json.load(f)
- df_loaded = json.loads(df)
- return df_loaded
- def load_nest_json(filename, key):
- a = json.loads(load_json(filename)[key][‘json’])
- return a
- if __name__ == “__main__”:
- xl_to_nest_json(‘test_xl_file.xlsx’)
- name = ‘test_xl_file.json’
- a = load_nest_json(name, ‘spectrum’)
- print(“================”)
- print(a)
- print(type(a))
- print(“================”)
このコードでは、JSONファイルに変換する際は、”xl_to_nest_json(エクセルファイル名)”という
自作関数を使用します。
また、JSONファイルをpythonの辞書型にして、表示する際は、
“load_nest_json(JSONファイル名, エクセルシート名)”という自作関数を使用します。
今回は、お試しでコードを作成してみました。
次回から、実際にエクセルファイルをJSONファイルに変換したり、変換したJSONファイルを使って
様々な解析を行ってみたいと思います。
[追記]
別の書き方で作ってみました。
- import pandas as pd
- import json
- import numpy as np
- from openpyxl import load_workbook
- import os
- import glob
- # このプログラムはエクセルの表をJSONファイルに変換するためのものです
- # 複数ファイルを処理可能にする
- DQ = “\””
- ENT = “\n”
- TAB = “\t”
- START = “{“
- END = “}”
- LEFT = “[“
- RIGHT = “]”
- SPACE = ” “
- COLON = “:”
- COMMA = “,”
- def xl_to_json(excel_file):
- global DQ, ENT, TAB, START, END, LEFT, RIGHT, SPACE, COLON, COMMA
- #シートの枚数を確認するためのコード
- #エクセルファイルを読み込み
- input_file = pd.ExcelFile(excel_file)
- # ファイル名を取得する
- data_name = os.path.splitext(excel_file)[0]
- #シート名を格納
- input_sheet_name=input_file.sheet_names
- #シートの枚数を確認
- sheets_num=len(input_sheet_name)
- #データ格納先を定義
- df = [0] * sheets_num
- json_data = [0] * sheets_num
- for i in range(sheets_num):
- df[i] = pd.read_excel(excel_file, sheet_name=input_sheet_name[i], index_col=0)
- # データフレームを変換
- json_data[i] = df[i].to_json(indent=4)
- # jsonファイル用の文字列を作る
- dff_data = START
- for i in range(sheets_num):
- dff_data += DQ + input_sheet_name[i] + DQ + COLON + json_data[i]
- if i < sheets_num – 1:
- dff_data += COMMA
- else:
- dff_data += END
- # JSONデータの書き出し
- output = ‘{}.json’.format(data_name)
- with open(output, ‘w’) as f:
- json.dump(dff_data, f)
- def xls_to_jsons(xls_dir):
- file_list = glob.glob(xls_dir + ‘/’ + ‘*.xlsx’)
- for file in file_list:
- xl_to_json(file)
- def load_json(file):
- # json.load関数を使ったjsonファイルの読み込み
- with open(file) as f:
- df = json.load(f)
- df_loaded = json.loads(df)
- return df_loaded
- def print_data(a):
- print(“================”)
- print(a)
- print(type(a))
- print(“================”)
- if __name__ == “__main__”:
- xls_to_jsons(‘C:/Users/hoge/Desktop/Sheets/data’)
- name = ‘C:/Users/hoge/Desktop/Sheets/data/test_xl_file.json’
- a = load_json(name)
- print_data(a)
コメント