[Python] 206 JSON CSV相互コンバータのexe化

どうせなら相互に変換できるツールの方が便利だろうと考え、前回のコードに加筆しました。

CSVファイルはExcelで開くため文字コードはshift-JIS、JSONファイルはVScodeなのでUTF-8とややこしめです。

ファイルパスの拡張子で変換方法を判断します。

# 途中から

if '.json' in path:
    # JSONファイルをデータフレームとして読み込む
    df = pd.read_json(path,lines=True)

    # 変換先のCSVファイル名を作成する
    csv_file = path.split('.')[0] + '.csv'

    # データフレームをCSVファイルに変換する
    df.to_csv(csv_file, encoding='Shift_JIS')

elif '.csv' in path:
    # shift-JISからUTF-8への変換
    utf_file = path.split('.')[0] + '_utf' + '.csv'
    cmd = "nkf -w %s > %s" % (path, utf_file)
    subprocess.call(cmd, shell=True)

    # CSVファイルを辞書型として読み込み
    json_list = []
    with open(utf_file,'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            json_list.append(row)

    # 変換先のJSONファイル名を作成する
    json_file = path.split('.')[0] + '.json'

    # JSONファイル作成
    with codecs.open(json_file, 'w','utf-8') as f:
        json.dump(json_list,f,ensure_ascii=False)

root.mainloop()

[Python] 205 JSON to CSVコンバータのexe化

使用頻度の高いコードはPyInstallerでexe化してツールにすることにしました。

これをマイアプリとしてアプリケーションフォルダにまとめておきます。

以下のコードでJSONファイルをCSVファイルに変換して同じフォルダに置きます。

起動に10秒程度かかりますが、とりあえず良しとします。

import pandas as pd
import sys,json
import tkinter as tk
import tkinter.font as font
from tkinter import StringVar
from tkinter import ttk

root = tk.Tk()
root.title("JSON_CSV_CONVERTER")
root.geometry("300x50")
root.configure(bg='#40E0D0')

# フォント設定
my_font = font.Font(root,family="System",size=18,weight="normal")

# フレームの作成・配置
frame = tk.Frame(root,background = '#40E0D0')
frame.grid(row=0,column=0, sticky=tk.NSEW, padx=5, pady=10)

# ラベルの作成・配置
label = tk.Label(frame,text='PATH',background = '#40E0D0',foreground = '#8b0000',font=my_font)
label.grid(row=0, column=0)

# パス入力エントリの作成・配置
entry = tk.Entry(frame,width=15,background = '#98fb98',foreground = '#8b0000',font=my_font)
entry.grid(row=0,column=1)

# 実行ボタンの配置
var_act = tk.IntVar()
act_btn = tk.Button(frame, text="実行",command= lambda:var_act.set(1),width=2,font=my_font)
act_btn.grid(row=0,column=2,padx=2)

# ファイルパスの入力を待機
act_btn.wait_variable(var_act)

# 入力したファイルパスを取得
path = entry.get()

# JSONファイルをデータフレームとして読み込む
df = pd.read_json(path,lines=True)

# 変換先のCSVファイル名を作成する
csv_file = path.split('.')[0] + '.csv'

# データフレームをCSVファイルに変換する
df.to_csv(csv_file, encoding='Shift_JIS')

root.mainloop()