仕上げ編①:コマンドライン対応でファイル指定解析

Parser

〜実務で使いやすいツールに進化〜

📝 はじめに

これまでの記事では、サンプルファイル名をコード中に直接書き込んで解析してきました。
しかし実務では、毎回違うTiming Reportファイルを扱います。

そこで今回は、コマンドライン引数でファイル名を指定できるように改造します。
これで、ツールとして一気に実用的になります。


🎯 やりたいこと

  • python parser.py timing_sample.rpt のように実行できるようにする
  • どのファイルでも解析できる汎用ツール化
  • ファイル未指定やエラー時の処理も加える

✍️ コード例

以下を parser_cli.py として保存してください。

#```python
import re
import sys
import pandas as pd
from dataclasses import dataclass, asdict

@dataclass
class TimingPath:
    startpoint: str
    endpoint: str
    slack: float

def parse_timing_report(filename: str):
    with open(filename, "r", encoding="utf-8") as f:
        text = f.read()

    start_matches = re.findall(r"Startpoint:\s*(.+)", text)
    end_matches   = re.findall(r"Endpoint:\s*(.+)", text)
    slack_matches = re.findall(r"slack.*?([-+]?\d*\.?\d+)", text, flags=re.IGNORECASE)

    paths = []
    for sp, ep, sl in zip(start_matches, end_matches, slack_matches):
        paths.append(TimingPath(startpoint=sp, endpoint=ep, slack=float(sl)))
    return paths

if __name__ == "__main__":
    # 引数チェック
    if len(sys.argv) < 2: print("使い方: python parser_cli.py ")
        sys.exit(1)

    filename = sys.argv[1]

    try:
        paths = parse_timing_report(filename)
        df = pd.DataFrame([asdict(p) for p in paths])
        print("=== 解析結果 ===")
        print(df)
    except FileNotFoundError:
        print(f"エラー: ファイル {filename} が見つかりません")

▶️ 実行方法

ターミナルで以下のように実行します。

python parser_cli.py timing_sample.rpt

出力例:

=== 解析結果 ===
                                         startpoint  \
0  U1/clk (rising edge-triggered flip-flop clocked by CLK)   

                                           endpoint  slack  
0  U5/data (rising edge-triggered flip-flop clocked by CLK)   0.11  

🔍 解説

  • sys.argv
    → コマンドライン引数を取得(argv[1] が指定ファイル名)
  • 例外処理
    → ファイルが存在しない場合にエラーメッセージを表示
  • 汎用化
    → コード中に固定のファイル名を書かずに済む

💡 応用ポイント

  • argparse モジュールを使えば、オプション指定(例:--csv--plot)も可能
  • 複数ファイルを指定して一括解析することもできる
  • 自動化スクリプトやCI/CDに組み込む下準備としても有効

✅ まとめ

  • コマンドライン引数でファイルを指定できるようにした
  • これで「どんなTiming Reportでも即座に解析」可能になった
  • 実務での使いやすさが大幅に向上
タイトルとURLをコピーしました