エクセルファイルをJSONファイルへ変換(Python言語使用)

Python言語を使用して、エクセルファイルをJSONファイルへ変換するコードを作ってみました。

 (ソースコードは一番下にあります)

試作品のため、重要なシステムやデータで使用するのはお控えください。

このプログラムは、以下の画像のような複数シートを有するエクセルファイルをJSONファイルに変換することを想定しています。

上記画像では、3つのシートを有するエクセルファイルを示しました。

各シートには、それぞれ1つの表形式のデータが含まれています。

それらの行および列の項目がJSONファイルのキーとし、

さらに、各々のシートのシート名をキーとして、各々の表を1つのデータとする

ネスト構造のJSONファイルを作ることができます。

それでは、実際のPythonコードを以下に示します。

  1. import pandas as pd
  2. import json
  3. import numpy as np
  4. from openpyxl import load_workbook
  5. import os
  6.  
  7. # このプログラムはエクセルの表をJSONファイルに変換するためのものです
  8.  
  9. def xl_to_nest_json(excel_file = ‘test_xl_file.xlsx’):
  10.     
  11.     #シートの枚数を確認するためのコード
  12.     #エクセルファイルを読み込み
  13.     input_file = pd.ExcelFile(excel_file)
  14.     # ファイル名を取得する
  15.     data_name = os.path.splitext(excel_file)[0]
  16.  
  17.     #シート名を格納
  18.     input_sheet_name=input_file.sheet_names
  19.     #シートの枚数を確認
  20.     sheets_num=len(input_sheet_name)
  21.     
  22.     #データ格納先を定義
  23.     df = [0] * sheets_num
  24.     json_data = [0] * sheets_num
  25.  
  26.     for i in range(sheets_num):
  27.         df[i] = pd.read_excel(excel_file, sheet_name=input_sheet_name[i], index_col=0)
  28.         # データフレームを変換
  29.         json_data[i] = df[i].to_json(indent=4)
  30.  
  31.     # ネスト用のデータフレームを作る
  32.     dff = pd.DataFrame([[json_data[i] for i in range(sheets_num)]],
  33.                         columns=[‘{}’.format(input_sheet_name[i]) for i in range(sheets_num)],
  34.                         index=[‘json’])
  35.     dff_data = dff.to_json(indent=4)
  36.     
  37.     # JSONデータの書き出し
  38.     output = ‘{}.json’.format(data_name)
  39.     with open(output, ‘w’) as f:
  40.             json.dump(dff_data, f)
  41.  
  42. def load_json(file):
  43.     # json.load関数を使ったjsonファイルの読み込み
  44.     with open(file) as f:
  45.         df = json.load(f)
  46.     df_loaded = json.loads(df)
  47.     return df_loaded
  48.  
  49. def load_nest_json(filename, key):
  50.     a = json.loads(load_json(filename)[key][‘json’])
  51.     return a
  52.  
  53. if __name__ == “__main__”:
  54.     xl_to_nest_json(‘test_xl_file.xlsx’)
  55.     name = ‘test_xl_file.json’
  56.     a = load_nest_json(name, ‘spectrum’)
  57.     print(“================”)
  58.     print(a)
  59.     print(type(a))
  60.     print(“================”)
  61.  
  62.     

このコードでは、JSONファイルに変換する際は、”xl_to_nest_json(エクセルファイル名)”という

自作関数を使用します。

また、JSONファイルをpythonの辞書型にして、表示する際は、

“load_nest_json(JSONファイル名, エクセルシート名)”という自作関数を使用します。

今回は、お試しでコードを作成してみました。

次回から、実際にエクセルファイルをJSONファイルに変換したり、変換したJSONファイルを使って

様々な解析を行ってみたいと思います。

[追記]

別の書き方で作ってみました。

  1. import pandas as pd
  2. import json
  3. import numpy as np
  4. from openpyxl import load_workbook
  5. import os
  6. import glob
  7.  
  8. # このプログラムはエクセルの表をJSONファイルに変換するためのものです
  9. # 複数ファイルを処理可能にする
  10.  
  11. DQ = “\””
  12. ENT = “\n”
  13. TAB = “\t”
  14. START = “{“
  15. END = “}”
  16. LEFT = “[“
  17. RIGHT = “]”
  18. SPACE = ” “
  19. COLON = “:”
  20. COMMA = “,”
  21.  
  22. def xl_to_json(excel_file):
  23.     global DQ, ENT, TAB, START, END, LEFT, RIGHT, SPACE, COLON, COMMA
  24.     
  25.     #シートの枚数を確認するためのコード
  26.     #エクセルファイルを読み込み
  27.     input_file = pd.ExcelFile(excel_file)
  28.     # ファイル名を取得する
  29.     data_name = os.path.splitext(excel_file)[0]
  30.  
  31.     #シート名を格納
  32.     input_sheet_name=input_file.sheet_names
  33.     #シートの枚数を確認
  34.     sheets_num=len(input_sheet_name)
  35.     
  36.     #データ格納先を定義
  37.     df = [0] * sheets_num
  38.     json_data = [0] * sheets_num
  39.  
  40.     for i in range(sheets_num):
  41.         df[i] = pd.read_excel(excel_file, sheet_name=input_sheet_name[i], index_col=0)
  42.         # データフレームを変換
  43.         json_data[i] = df[i].to_json(indent=4)
  44.  
  45.     # jsonファイル用の文字列を作る
  46.     dff_data = START
  47.     for i in range(sheets_num):
  48.         dff_data += DQ + input_sheet_name[i] + DQ + COLON + json_data[i]
  49.         if i < sheets_num – 1:
  50.             dff_data += COMMA
  51.         else:
  52.             dff_data += END
  53.  
  54.     # JSONデータの書き出し
  55.     output = ‘{}.json’.format(data_name)
  56.     with open(output, ‘w’) as f:
  57.             json.dump(dff_data, f)
  58.  
  59. def xls_to_jsons(xls_dir):
  60.     file_list = glob.glob(xls_dir + ‘/’ + ‘*.xlsx’)
  61.     for file in file_list:
  62.         xl_to_json(file)
  63.  
  64. def load_json(file):
  65.     # json.load関数を使ったjsonファイルの読み込み
  66.     with open(file) as f:
  67.         df = json.load(f)
  68.     df_loaded = json.loads(df)
  69.     return df_loaded
  70.  
  71. def print_data(a):
  72.     print(“================”)
  73.     print(a)
  74.     print(type(a))
  75.     print(“================”)
  76.  
  77. if __name__ == “__main__”:
  78.     xls_to_jsons(‘C:/Users/hoge/Desktop/Sheets/data’)
  79.     name = ‘C:/Users/hoge/Desktop/Sheets/data/test_xl_file.json’
  80.     a = load_json(name)
  81.     print_data(a)

 

コメント

タイトルとURLをコピーしました