【Python】Markdown形式のTableを出力する

スポンサーリンク

はじめに

Python を使って、Markdown 形式の Table を出力する方法を紹介します。

python-tabulate

python-tabulateは、いくつかの形式で表を出力してくれるライブラリです。

GitHub - astanin/python-tabulate: Pretty-print tabular data in Python, a library and a command-line utility. Repository migrated from bitbucket.org/astanin/python-tabulate.
Pretty-print tabular data in Python, a library and a command-line utility. Repository migrated from bitbucket.org/astanin/python-tabulate. - GitHub - astanin/py...

様々な形式で表をフォーマットしてくれるライブラリですが、今回は Markdown 形式のみを紹介します。

インストール

pip install tabulate

Markdown 形式の Table を出力する

下記のように、ヘッダーとテーブルの内容となるリストを渡し、tablefmt="github"とするだけで、Markdown 形式の Table を出力してくれます。

  • headers: ヘッダー
  • table: テーブルの内容
from tabulate import tabulate

headers = ["header1", "header2"]
table = [["value1-1", "value1-2"], ["value2-1", "value2-2"], ["value3-1", "value3-2"]]

print(tabulate(table, headers, tablefmt="github"))
| header1  | header2  |
| -------- | -------- |
| value1-1 | value1-2 |
| value2-1 | value2-2 |
| value3-1 | value3-2 |

Kubernetes のマニフェストから Table を出力する

例として、Kubernetes のマニフェストから Markdown の Table を出力してみます。

Yaml ファイルには PyYAML を使います。PyYAML については下記を参照してください。

【Python】yamlを扱う
はじめにPython で Yaml ファイルを扱える PyYAML についてざっと紹介します。PyYAMLPyYAML は、Python で YAML ファイルを扱えるライブラリです。インストールまずは、pipで PyYAML をインストー...

まずは、下記のように複数のマニフェストを用意します。

.
└── yaml
    ├── deployment1.yaml
    ├── deployment2.yaml
    └── deployment3.yaml

それぞれのファイルの内容は下記の通りです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp1
  template:
    metadata:
      labels:
        app: myapp1
    spec:
      containers:
        - name: container1-myapp1
          image: busybox
        - name: container2-myapp1
          image: busybox
        - name: container3-myapp1
          image: busybox
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp2
  template:
    metadata:
      labels:
        app: myapp2
    spec:
      containers:
        - name: container1-myapp2
          image: busybox
        - name: container2-myapp2
          image: busybox
        - name: container3-myapp2
          image: busybox
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp3
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp3
  template:
    metadata:
      labels:
        app: myapp3
    spec:
      containers:
        - name: container1-myapp3
          image: busybox
        - name: container2-myapp3
          image: busybox
        - name: container3-myapp3
          image: busybox

下記のように、各 yaml ファイルから値を取り出し、python-tabulateを使うだけで簡単に Makrdown 形式の Table が表示できます。

import glob
import yaml
from tabulate import tabulate

headers = ["Pod name", "Container name"]
table = []

files = glob.glob("./yaml/*.yaml")
for file in files:
    with open(file) as f:
        yaml_obj = yaml.safe_load(f)
    for container in yaml_obj["spec"]["template"]["spec"]["containers"]:
        table.append([yaml_obj["metadata"]["name"], container["name"]])

print(tabulate(table, headers, tablefmt="github"))
| Pod name | Container name    |
| -------- | ----------------- |
| myapp1   | container1-myapp1 |
| myapp1   | container2-myapp1 |
| myapp1   | container3-myapp1 |
| myapp2   | container1-myapp2 |
| myapp2   | container2-myapp2 |
| myapp2   | container3-myapp2 |
| myapp3   | container1-myapp3 |
| myapp3   | container2-myapp3 |
| myapp3   | container3-myapp3 |

参考

タイトルとURLをコピーしました