〜Startpoint・Endpoint・slackをExcelで扱える形にする〜
📝 はじめに
これまでの記事では、
- Pythonでファイルを読み込む
- grepのように特定の行を抜き出す
- 正規表現でslackの数値やStartpoint/Endpointを抽出する
ことを学んできました。
今回はいよいよ「実務に役立つ形」に進めます。
抽出した情報をCSVに出力してExcelで扱えるようにする のが今回のテーマです。
🎯 やりたいこと
- Timing Reportから
- Startpoint
- Endpoint
- slack値
をまとめる
- CSVファイルに保存
- Excelで簡単に開けるようにする
✍️ コード例
以下のスクリプトを export_csv.py
として保存してください。
#```python
#export_csv.py
#Timing ReportからStartpoint・Endpoint・slackを抽出しCSVに出力する
import re
import csv
filename = "timing_sample.rpt"
output_csv = "timing_summary.csv"
with open(filename, "r", encoding="utf-8") as f:
text = f.read()
#正規表現で抽出
start_pattern = r"Startpoint:\s(.+)" end_pattern = r"Endpoint:\s(.+)"
slack_pattern = r"slack.?([-+]?\d.?\d+)"
start_matches = re.findall(start_pattern, text)
end_matches = re.findall(end_pattern, text)
slack_matches = re.findall(slack_pattern, text, flags=re.IGNORECASE)
#CSVに書き出し
with open(output_csv, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Startpoint", "Endpoint", "Slack (ns)"]) # ヘッダ行
for sp, ep, sl in zip(start_matches, end_matches, slack_matches):
writer.writerow([sp, ep, sl])
print(f"CSV出力完了: {output_csv}")
▶️ 実行方法
ターミナルで次のコマンドを実行します。
python export_csv.py
出力メッセージ:
CSV出力完了: timing_summary.csv
📊 出力されるCSV例
timing_summary.csv
をExcelで開くと次のようになります。
Startpoint | Endpoint | Slack (ns) |
---|---|---|
U1/clk (rising edge-triggered flip-flop clocked by CLK) | U5/data (rising edge-triggered flip-flop clocked by CLK) | 0.11 |
🔍 解説
- csv.writer を使うと、簡単にCSV形式で出力できる
writer.writerow([...])
で1行ずつ追加していくzip()
を使って Startpoint / Endpoint / Slack を1セットとしてまとめた
💡 応用ポイント
- 複数パスが含まれるレポートでも、自動で行が増えて一覧化できる
- Excelに貼り付けてフィルタやソートが可能
- pandasを使えばさらに高度な分析も可能
✅ まとめ
- Startpoint / Endpoint / Slack を抽出してCSVに保存できた
- これでExcelで簡単に分析・報告資料作成ができる
- Timing Report解析が 手作業から自動化 へと進化した