LoginSignup
3
6

More than 5 years have passed since last update.

CSVファイルからJSONファイルを作成するPythonスクリプト

Last updated at Posted at 2016-12-21

同じ項目でたくさんのデータ作るのに、人手だとスプレッドシート(Excelとか)使ってCSVファイルにするのが楽です。
でも別のツールとかに渡す時、JSONファイルでないとだめ、ってことがあるので、そういう時に使うPythonスクリプトを作りました。
自分は、Pythonのunittestをデータ駆動形で実行させるのに、JSON形式のデータが必要でした。

Python unittest DDT > Example usage

利用の前提

OS : Windows
Python : v3.5.1

スペック

  • 引数に指定したcsvファイルから、JSONファイルを作成し、Pythonスクリプトを実行したディレクトリに保存する
  • CSVファイルの行ごとに、カンマ区切りのデータをリストにする
  • 作成するJSONファイル名は、[CSVファイル名]_datapool.json
  • ファイルのエンコードはCSV、JSONともにShift-JIS(CSVファイルがUTF-8だと動作しない。)
  • CSVファイルのデータに日本語が入ってても大丈夫
  • CSVファイルの一行目はヘッダ行として、JSONファイルのデータからは除外する(2行目のデータからJSONファイルに書き込まれる)

ソース

JSONファイルは、人が読みやすいレイアウトになるようインデントかけたりしてます。
日本語のコメント入れると、実行時にjson.dumpsの行でエンコードのエラーが発生したので入れてません。(自己解決できなかったので保留にしてます。LinuxとかMacだと全部UTF-8でエラー出ないのでは、と悶々。)

script.py
# -*- coding: utf-8 -*-
import csv
import json
import sys, os, codecs

argvs = sys.argv
for csv_file_path in argvs:
    if csv_file_path == __file__:
        continue
    with codecs.open(csv_file_path, 'r', 'shift_jis') as f:
        json_reader = csv.reader(f)
        name, ext = os.path.splitext(os.path.basename(csv_file_path))
        with codecs.open(name + '_datapool.json', 'w', 'shift_jis') as json_file:
            out = json.dumps([line_json for i, line_json in enumerate(json_reader) if i > 0] ,ensure_ascii=False, indent=4, sort_keys=False, separators=(',', ': '))
            json_file.write(out)

使い方

上記のスクリプトファイルを、引数にcsvファイルを指定して実行します。(複数指定可)

>python script.py csv_file1.csv

作られるJSONファイル例は以下。

csv_file1_datapool.json
[
    [
        "テスト1",
        "テスト2"
    ],
    [
        "てすと1",
        "てすと2"
    ]
]

参考

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