雑務撃退術🐍
サーバー障害対応スクリプトについて、運用者向けの仕様書を作成するタスク。
ホスト名とログインするために必要な情報を記載した以下のようなjsonファイルがあり、その情報を全て専用のエクセルに貼り付けなければならなかった。
(IPアドレスはもちろん数値である…)
{
"serverintheruemorgue": {
"ip_address": "quoth.the.raven.nevermore",
"user": "edgar",
"password": "nightpain"
}
}
ホストの数が少なければ手動でコピペして対応できるが、何百個とあると流石に限界である。
Pythonでロジックを組んでなんとか解決できないか考えてみた。
🐼の手を借りてみる
最初はクライアント指定のエクセルに直接出力することも考えたが、同じデータを複数のフォーマットに出力したり、そもそもフォーマットの変更等が発生することを考えると、貼り付けは手動で行う方が汎用性が高いだろうと考えた。
結局jsonから読み取ったデータをpandas.DataFrame型に変換して表として扱えるようにし、最終的にCSVファイルに書き出した上で列ごとに手動で目的先のファイルに貼り付ける、という案に落ち着いた。
最終的なコードは以下。
import json
import pandas
# jsonファイル読み込み
js = open('jsonファイルがあるディレクトリのパス', 'r')
js_file = json.load(js)
# jsonファイルのキーを取得し、リストに格納
hostname_list = list(js_file.keys())
# jsonファイルの値を取得し、リストに格納
values_list = list(js_file.values())
# 取得した要素を格納するためのリストを作成
ip_address_list = []
user_list = []
pw_list = []
# jsonファイルの値からそれぞれの要素を取得し、リストに格納
for i in values_list:
ip_address_list.append(i["ip_address"])
user_list.append(i["user"])
pw_list.append(i["password"])
# それぞれのリストの中身に相当するカラム名を指定し、DataFrameオブジェクト作成
d = {"hostname": hostname_list, "ip_address": ip_address_list, "user": user_list, "password": pw_list}
df = pandas.DataFrame(d)
# csvファイル作成
df.to_csv('CSVファイルを作成したいディレクトリのパス')
Python🐍とかpandas🐼とか、絵文字があるのがいい。
(シェル🐚もあるぞ)