MENU
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
カテゴリー
  • IT関連 (623)
    • Bootstrap (2)
    • クラウド (4)
    • サーバー技術 (185)
    • ストレージ (7)
      • NetApp (7)
    • ネットワーク技術 (91)
      • Cisco (36)
      • Juniper (18)
      • 負荷分散装置 (17)
    • パソコン関連 (92)
      • MAC (25)
      • Windows (54)
    • プログラミング (154)
      • Ansible (11)
      • C言語 (23)
      • Python (111)
        • Django (20)
    • 仮想化 (88)
      • Docker (63)
      • VMware (23)
  • VPS (200)
    • ABLENET VPS (16)
    • Amazon Lightsail(VPS) (2)
    • ConoHaVPS (37)
    • mixhostVPS (4)
    • WebARENAIndigo (16)
    • XServerVPS (34)
    • お名前.com VPS (12)
    • さくらのVPS (24)
    • カゴヤクラウドVPS (13)
    • シンVPS (7)
  • レンタルサーバー (56)
    • エックスサーバー (38)
  • 光回線 (8)
  • 技術スキルアップ開発・学習 (7)
    • Envader (2)
    • RareTECH (2)
    • Udemy (3)
もう現役20年超えましたー。経験値ならだれにも負けないエンジニア技術ブログ
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
  1. ホーム
  2. IT関連
  3. プログラミング
  4. Python
  5. 【Python】デスクトップアプリ「Tkinter」でNW機器データをエクセルへ自動作成プログラム

【Python】デスクトップアプリ「Tkinter」でNW機器データをエクセルへ自動作成プログラム

2020 5/29
Python
2020年2月16日2020年5月29日

Pythonでデスクトップアプリ「Tkinter」を使用し、GUIからSSH接続、コマンド入力で自動で出力結果をエクセルシート(範囲指定)に書き込むプログラムの流れを作成しました。

まだ完成はしていませんが、抽出したデータから必要な文字列、データを任意のセルに書き込むプログラムの流れとなっているので、参考にしてください。

目次
安くて高速!高性能VPSで快適開発!
最速5分でサーバー構築
>>>こちらをチェック

エンジニア必見! 技術力を伸ばすVPS徹底比較
>>>VPS比較

Pythonデスクトップアプリ「Tkinter」を利用して出力したデータをエクセルへ自動反映

と言うことで、まずはこの「Tkinter」とは何かということですが。

「Tkinter」は、PythonでGUIを構築・操作するための標準ライブラリです。
Tkinterを起動すると以下のようなアプリでGUIで表示されます。

  • host:IPアドレス、またはホスト名入力
  • name:SSH接続した先のIDを入力
  • Password:パスワード入力
  • command:任意のコマンド入力。※今回は「show run」を入力

「Tkinter」ライブラリを利用したエクセル自動作成までのプログラム

今回はこの「Tkinter」を利用し、入力したデータからNW機器へSSH接続し、抽出データの指定のデータを抜き取り、エクセルへ書き込みます。
プログラムのコードは以下となります。

※ ssh_test_tkinter_00.py

import tkinter
import paramiko
import pandas as pd
import re
import openpyxl
from tkinter import messagebox


#「tkinter」実行ボタンがクリックされたら開始
def button_click():
    input_host_value = input_name.get()
    input_name_value = input_address.get()
    input_address_value = input_phone.get()
    input_command_value = input_command.get()


    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(input_host_value, username=input_name_value, password=input_address_value)

    stdin, stdout, stderr = client.exec_command(input_command_value)
    stdin.write(input_command_value)

    for o in stdout:
        with open('file.csv', 'a', newline='') as f:
            print(o, end='', file = f)

    for e in stderr:
        print(e)

    client.close()
    root.quit()
    

print('コンフィグ取得 > csvファイル保存完了')


# tkinter_ウインドウの作成
root = tkinter.Tk()
root.title("SSH_LOG_GET GUI")
root.geometry("350x120")

# host/IPaddress
input_name_label = tkinter.Label(text="host")
input_name_label.grid(row=1, column=1, padx=10,)

# host/IPaddress入力欄の作成
input_name = tkinter.Entry(width=40)
input_name.grid(row=1, column=2)


# userID
input_address_label = tkinter.Label(text="name")
input_address_label.grid(row=2, column=1, padx=10,)

# userID入力欄の作成
input_address = tkinter.Entry(width=40)
input_address.grid(row=2, column=2)


# パスワード
input_phone_label = tkinter.Label(text="password")
input_phone_label.grid(row=3, column=1, padx=10,)

# パスワード入力欄の作成
input_phone = tkinter.Entry(width=40)
input_phone.grid(row=3, column=2)


# コマンド
input_command_label = tkinter.Label(text="command")
input_command_label.grid(row=4, column=1, padx=10,)

# コマンド入力欄の作成
input_command = tkinter.Entry(width=40)
input_command.grid(row=4, column=2)

#ボタンの作成
button = tkinter.Button(text="実行ボタン",command=button_click)
button.place(x=10, y=80)

#ウインドウの描画
root.mainloop()


# 出力結果のスペースをカンマ区切りに変換
with open('file.csv', 'r', newline='') as file, 
    open('file_out.csv', 'w', newline='') as fileout:
    
    text = re.sub(r's* ', ',', file.read())
    print(text, file = fileout)
    print('置換完了')


# CSVファイルの読み込み
col_names = ['c{0:02d}'.format(i) for i in range(100)]
#data = pd.read_csv('file_out.csv', encoding="shift-jis", names = col_names)
data = pd.read_csv('file_out.csv', encoding='cp932', names = col_names)

# Excel形式で出力
data.to_excel('excel-data.xlsx', encoding='utf-8')

print('CSV > Excel変換完了')


#エクセルファイルのデータから「interface」 切り出し

#エクセルファイル読み込み
df = pd.read_excel('excel-data.xlsx')

#カラムc00列の「interface」の文字列抽出
data = df[df['c00'].str.contains('interface')]

#エクセルシートにデータ出力
data.to_excel('excel-data_find.xlsx', encoding='utf-8')

print('文字列:切り取り成功')


#セルとシート指定範囲読み取りと書き込み


wb =openpyxl.load_workbook('excel-data_find.xlsx')
wb.create_sheet('interface')

sheet = wb.get_sheet_by_name('Sheet1')
sheet2 = wb.get_sheet_by_name('interface')


for i in range(1,10):
    copy = sheet.cell(row = i, column = 4).value
#コピー元の列を定義
    sheet2.cell(row = i+10, column = 10, value = copy)
#Valueに指定した値を指定先の列に貼り付ける
    i += 1

wb.save('data.xlsx')


print('別シート「interface」への出力完了')
  • 10行目:def 「button_click」という関数を宣言 ※Tkinter起動
  • 19行目:Tkinterで入力した数値でSSHアクセス実施
  • 21行目:入力したコマンドをSSHアクセス先で実行 ※今回はshow runコマンド実施
  • 25,26行目:出力したデータをCSVファイルへ書き込み
  • 86行目〜:エクセルにセル単位で書き込めるように、出力結果のスペースをカンマ区切りに変換
  • 95行目〜:CSVファイルをエクセルに変換
  • 106行目〜:エクセルファイルのデータから「interface」 という文字列を切り出し
  • 120行目〜:セルとシート指定範囲で読み取りと書き込み

プログラム実行結果

本プログラムを実行すると、以下のようにTkinterが起動し必要項目を記入します。
それぞれSSH接続に必要な情報と、接続後のコマンドを入力します。

入力後、「実行ボタン」をクリックすると、SSHアクセスしたNW機器のデータを出力し、その中の任意の文字列データ(今回は「interface」)を抽出し、任意の任意のシートのセルに書き込みます。

PS C:Python> python .ssh_test_tkinter_00.py
コンフィグ取得 > csvファイル保存完了
置換完了
CSV > Excel変換完了
文字列:切り取り成功
.ssh_test_tkinter_00.py:128: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  sheet = wb.get_sheet_by_name('Sheet1')
.ssh_test_tkinter_00.py:129: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  sheet2 = wb.get_sheet_by_name('interface')
別シート「interface」への出力完了
PS C:Python>

「interface」のついた列のみの取得

指定で抜粋したデータを別シートの指定のセルに張り付けることに成功

全体のエクセルシートへの自動作成までのプログラムが完成したので、あとはエクセルのシートでパラメータシートを作成するプログラムを作っていきます。

最終的な完成版はこちらで随時更新をしていきます。
投稿が見つかりません。

作成までに実施したプログラムに関しての情報は随時公開していきます。

エンジニアスキルをアップする勉強法

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。

あわせて読みたい
現役エンジニアがおすすめするVPSレンタルサーバ比較(高速SSD限定) 格安VPS比較(2025年最新版)

Python
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)



検索
カテゴリー
新着記事
  • XServerVPS アニメ風 男の子 プログラミングをしている VPSを利用している 楽しそうにしている
    XServerVPSで証明書(SSL)を取得する方法
    2025年3月24日
    XServerVPS
  • レンタルサーバ アニメ風 女の子 楽しんでパソコンをしている 目がキラキラ
    WordPressがレンタルサーバよりVPSで利用する方がおすすめの理由
    2025年3月19日
    VPS
  • VPS レンタルサーバー アニメ風 女の子 プログラミングをしている VPSを利用している 楽しそうにしている
    VPSとクラウドの違いとは?初心者向けにわかりやすく解説
    2025年3月5日
    VPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSはWindows serverを利用できない。その理由と利用できるOSは?
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSでゲームを利用する環境はあるのか
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSのサイトの表示速度は他社に比べて早いのか?
    2025年3月4日
    シンVPS
目次
目次