3
1

PythonでJSONファイルを読み込みCSVデータを作成するツールを作ってみた

Posted at

1.作成物

・各試験を行う上でサンプルデータを作成するにあたって便利かなと思い、ランダムで文字列や数値をCSVファイルで出力するツールを作成した。

・作成するCSVの各列についてはJSONファイルで指定しておいて、コマンド側ではファイルの読込先、出力先、行数の指定のみにした。
(今回、プライベートでのGitHubへの展開やQiita投稿が初めてなのでかなり手探りで作成した)

2.簡単な仕様

・下記の機能をまずは実装した。
・後々、名前、住所等の様々なタイプについてランダムで作成できるようにする。

■ 機能

①JSONファイルから各CSV列の要素の読み込み
②読み込んだ要素に沿って文字列または数値のランダム値を作成
③指定した行数分、JSONから読み取った要素のランダム値をカンマ区切りで作成

■ 操作イメージ

・コマンドラインで下記を設定
 ・読込先のJSONファイルパス
 ・作成先のCSVファイルパス
 ・作成の際の行数

■ JSONで指定する要素

 ・値の種類(文字列:1、数値:2)
 ・文字列は桁数を指定(要素1)
 ・数値は開始値(要素1)と最終値(要素2)を指定

3.用意したJSONファイル

↓作成物

https://github.com/k-tsuru/tool/commit/038a960ed0053373d00014cef93e62b762d7d30d

・上記の「JSONで指定する要素」を基に下記の構成でファイルを用意

read_sample.json
  {
    "column1":{
        "type":"1",
        "element1": 10,
        "element2": 1
    },

    "column2":{
        "type":"2",
        "element1": 1000,
        "element2": 3000
    },

    "column3":{
        "type":"2",
        "element1": -100000,
        "element2": 100000
    }
}

・"column"は列(追加する分、列が増える)
・"type"は"1":文字列,"2":数値
・"type"が文字列(1)の場合、"element1"は桁数 ※"element2"は無視
・"type"がの数値(2)の場合、"element1"は開始値と"element2"は終了値

4.実装したPythonファイル

↓作成物

https://github.com/k-tsuru/tool/commit/1e3992eae4a2911fa77ea72a5ffe1b1079bfcc71

1.import

create_csv_json.py
import os
import json
import random
import random, string

今回はJSONファイルの読み込みやランダム関数を使用する為、上のimportを記載

2.コマンドラインでの読込ファイルの指定

create_csv_json.py
print('===読込先の情報入力===')
input_dir_path = input('読込先のパスを入力してください。>>')
input_file_name = input('読込先のファイル名を入力してください。>>')

read_json_file = os.path.join(input_dir_path, input_file_name)

コマンドラインで読込先のファイルパスを取得

3.コマンドラインでの作成ファイルの指定

create_csv_json.py
print('===出力先の情報入力===')
output_dir_path = input('保存先のパスを入力してください。>>')
output_file_name = input('保存するファイル名を入力してください。>>')
row_no = int(input('入力する行数を指定してください>>'))

new_file_path = os.path.join(output_dir_path, output_file_name)

コマンドラインで作成先のファイルパス、作成行数を指定

4.ランダム文字列の生成

create_csv_json.py
# ランダムで文字列入力
def randomname(n):
   return ''.join(random.choices(string.ascii_letters + string.digits, k=n))

"n"で桁数を指定

5.ランダム数値の生成

create_csv_json.py
# ランダムで数字入力
def randomvalue(start_no,end_no):
    random_value = random.randrange(start_no,end_no)
    return random_value

"start_no","end_no"で開始値、最終値を指定

6.ランダム数値の生成

create_csv_json.py
# CSVファイル作成行数の初期化
count = 0

# CSVファイル作成
f = open(new_file_path, mode='w')
while count < row_no:
    column_length = 0
    str_row = ''
    for json_value in json_load.values():
        if json_value['type'] == '1':
            str_row += randomname(json_value['element1'])
            str_row += ','
        elif json_value['type'] == '2':
            str_row += str(randomvalue(json_value['element1'],json_value['element2']))
            str_row += ','
    # 末尾1文字を削除
    f.write(str_row[:-1])
    f.write('\n')
    count += 1
f.close()

JSONファイルを読み込んだ列数分、for文で処理を行う。
種類(type)が文字列の場合はランダム文字列関数の呼び出し
種類(type)が数値の場合はランダム数値関数を呼び出す
各行の最後に不要な","がつくため1行作成の終わりにstr_row[:-1]で最後の1文字目を削除し、改行コードを付与

5.今後のアップデート

・まずはJSONファイルを読み込みそれを基にランダムでCSVファイルを作成することを目指した。
・今後は名前や住所のサンプルデータを作成するために種類(type)を追加で実装することを進めていく。

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