kooshinのネットワーク運用メモ
ネットワーク運用している中で、実践したいことをメモとして公開しています。
2023/03/29
Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出してCSV形式で保存する
## コード ```python # ファイル名とホスト名の一覧をCSV形式で保存する import csv import logging import re from glob import glob logging.basicConfig( level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s", ) # globでシスコルータのファイルを指定 config_filenames = glob("config/*") config_filenames.sort() # CSVに出力するホスト名のリストを保存 # リストに辞書形式で保存する config_hostnames = [] # コンフィグファイルを順次読み込む for config_filename in config_filenames: with open(config_filename) as f: config = f.read() # 正規表現を使用してホスト名を抽出する match = re.search(r"^hostname\s+(?P
.*)", config, re.MULTILINE) if match: # ホスト名があったもののみ表示する hostname = match.group("hostname") logging.info(f"{config_filename}: {hostname=}") # 辞書形式でCSVに出力するためリストに追記する config_hostname = { "config_filename": config_filename, "hostname": hostname, } config_hostnames.append(config_hostname) # config/config_hostnames.csvにCSV形式で出力する # DictWriterを使用して、辞書形式で出力する with open("output/config_hostnames.csv", "w", newline="") as f: writer = csv.DictWriter(f, fieldnames=["config_filename", "hostname"]) writer.writeheader() writer.writerows(config_hostnames) ``` ## 結果 実行すると時刻とファイル名、ホスト名を逐次表示します。 ```bash 2023-03-29 23:09:26,347 - INFO - config/rt1-confg: hostname='rt1' 2023-03-29 23:09:26,347 - INFO - config/rt2-confg: hostname='rt2' 2023-03-29 23:09:26,347 - INFO - config/rt3-confg: hostname='rt3' ``` CSV形式でファイル名とホスト名の一覧が出力されます。 ```csv:output/config_hostnames.csv config_filename,hostname config/rt1-confg,rt1 config/rt2-confg,rt2 config/rt3-confg,rt3 ``` ## 説明 複数のシスコルータのファイル名とホスト名の一覧をCSV形式で保存します。 コンフィグファイルの読み込みや、正規表現を利用してホスト名を抽出する方法は、下記と同じです。 * [Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出する](https://blog.kooshin.net/2023/03/pynwtips-confighostnamemulti.html) 一覧をconfig_hostnamesリストに保存する処理部分です。 CSVに保存するパラメータが増えた場合に備えて、リスト形式ではなく辞書形式でconfig_hostnameに保存します。 最後にまとめてCSVで出力するために、config_hostnamesリストにファイル名とホスト名を追記します。 ```python # 辞書形式でCSVに出力するためリストに追記する config_hostname = { "config_filename": config_filename, "hostname": hostname, } config_hostnames.append(config_hostname) ``` config_hostnamesリストをCSVとして出力する処理部分です。 辞書形式で内容が保存されているため、どの順番で列を出力するか、 fieldnames=["config_filename", "hostname"]で指定しています。 今回はファイル名、ホスト名の順番で列に出力します。 ヘッダ行を出力するために、writer.writeheader()を利用しています。 各列名は辞書のキーと同じ名前となります。 ```python # config/config_hostnames.csvにCSV形式で出力する # DictWriterを使用して、辞書形式で出力する with open("output/config_hostnames.csv", "w", newline="") as f: writer = csv.DictWriter(f, fieldnames=["config_filename", "hostname"]) writer.writeheader() writer.writerows(config_hostnames) ``` ## 関連 * [Pythonでシスコルータのコンフィグファイルからホスト名を抽出する](https://blog.kooshin.net/2023/03/pynwtips-confighostnamesingle.html) * [Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出する](https://blog.kooshin.net/2023/03/pynwtips-confighostnamemulti.html) * [Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出してCSV形式で保存する](https://blog.kooshin.net/2023/03/pynwtips-confighostnamecsv.html)
前の投稿
ホーム
Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出してCSV形式で保存する
Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出する
Pythonでシスコルータのコンフィグファイルからホスト名を抽出する
Pythonで複数のシスコルータのコンフィグファイルからホスト名を抽出してCSV形式で保存する