LoginSignup
2
3

More than 3 years have passed since last update.

from csv to json with Python

Posted at

csv形式からjson形式へ

知り合いのおじさんが経営する学習塾で使用する英単語テスト作成システムの新調のため,csv形式で保存されていた単語のデータをjson形式に変換する必要がありました.

備忘録として初投稿しようと思います.

Pythonで変換

探せばフリーソフトなど見つかりそうでしたが,最近利用しているPandasの復習も兼ねてPythonで変換しました.

利用したモジュール

  • json
  • pandas
  • argparse

csv形式のファイルの仕様

1行目に乱数,2行目に単語,3行目に意味が入力されています.

乱数はテスト作成でランダムに出題できるよう,マクロで並び替えを行う際に使用します.新しい環境では利用しないため削除します.

word_db.csv
random num, name, mean
0.93837248,apple,りんご
...
...

json形式のファイルの仕様

システム自体を製作したのは別の方なので,実際の仕様ではありませんが以下のようにします.

word_db.json
[
    {
        "name": "単語",
        "mean": "単語の意味",
        "id": "一意に設定する文字列",
        "rank": "習熟度を表す数値(int)",
    },
]

ソースコード

あれこれ書く前に結果だけ載せておきます.

細かい部分は変更しておりますが,おおまかな雰囲気はこんな感じです.

csv_to_json.py
import json
import argparse
import pandas as pd


def csv_to_json(src_file, dst_file):
    if dst_file:
        dst_file = dst_file
    else:
        dst_file = 'tmp.json'
    df = pd.read_csv(src_file)
    df['id'] = [None for _ in range(len(df.index))]
    df['rank'] = [0 for _ in range(len(df.index))]
    df.to_json(dst_file, force_ascii=False, orient='records')

    with open(dst_file, 'r', encoding='utf-8') as f:
        json_out = json.load(f)
    with open(dst_file, 'w', encoding='utf-8') as f:
        json.dump(json_out, f, ensure_ascii = False, indent = 4, separators = (',', ': '))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    # add argument: csv file name
    parser.add_argument('src', help='source csv file name')
    parser.add_argument('--dst', help='destination json file name')
    # analysis arguments
    args = parser.parse_args()
    csv_to_json(args.src, args.dst)

利用する際はこんな感じ.

$ python3 csv_to_json.py word_db.csv

この場合tmp.jsonというjson形式のファイルが作成されます.
ファイル名を指定したい場合は以下の通り.

$ python3 csv_to_json.py word_db.csv --dst (指定したいファイル名).json

2度も書き込んでいる理由

最初はリストを用いて適当に変換してしまおうと思っていましたが,列の追加・削除やデータの形式を保った状態での書き込みが面倒だったので,pandasを用いることにしました.

その際データの整形がうまくいかず1行で出力されてしまったので,なんとなく見栄えがいいと思い2回目に整形してDumpしています.

以上.

今後複数の単語データを変換する可能性があったため,コンソールによるファイル名の設定を行えるようにできたのは嬉しい!

Pythonペーペーですが楽しくて時間を忘れますね〜

初投稿で至らない部分も多くあると思いますので,改善点やご指摘お待ちしています.

2
3
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
2
3