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で指定する要素」を基に下記の構成でファイルを用意
{
"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
import os
import json
import random
import random, string
今回はJSONファイルの読み込みやランダム関数を使用する為、上のimportを記載
2.コマンドラインでの読込ファイルの指定
print('===読込先の情報入力===')
input_dir_path = input('読込先のパスを入力してください。>>')
input_file_name = input('読込先のファイル名を入力してください。>>')
read_json_file = os.path.join(input_dir_path, input_file_name)
コマンドラインで読込先のファイルパスを取得
3.コマンドラインでの作成ファイルの指定
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.ランダム文字列の生成
# ランダムで文字列入力
def randomname(n):
return ''.join(random.choices(string.ascii_letters + string.digits, k=n))
"n"で桁数を指定
5.ランダム数値の生成
# ランダムで数字入力
def randomvalue(start_no,end_no):
random_value = random.randrange(start_no,end_no)
return random_value
"start_no","end_no"で開始値、最終値を指定
6.ランダム数値の生成
# 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)を追加で実装することを進めていく。