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

2023.04.25
2024.03.24
プログラミング
MarkdownPython

はじめに

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.

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. - astanin/python-tabulate

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

インストール

1pip install tabulate

Markdown 形式の Table を出力する

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

  • headers: ヘッダー
  • table: テーブルの内容
1from tabulate import tabulate
2
3headers = ["header1", "header2"]
4table = [["value1-1", "value1-2"], ["value2-1", "value2-2"], ["value3-1", "value3-2"]]
5
6print(tabulate(table, headers, tablefmt="github"))
1| header1  | header2  |
2| -------- | -------- |
3| value1-1 | value1-2 |
4| value2-1 | value2-2 |
5| value3-1 | value3-2 |

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

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

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

unknown link

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

1.
2└── yaml
3    ├── deployment1.yaml
4    ├── deployment2.yaml
5    └── deployment3.yaml

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

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: myapp1
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: myapp1
10  template:
11    metadata:
12      labels:
13        app: myapp1
14    spec:
15      containers:
16        - name: container1-myapp1
17          image: busybox
18        - name: container2-myapp1
19          image: busybox
20        - name: container3-myapp1
21          image: busybox
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: myapp2
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: myapp2
10  template:
11    metadata:
12      labels:
13        app: myapp2
14    spec:
15      containers:
16        - name: container1-myapp2
17          image: busybox
18        - name: container2-myapp2
19          image: busybox
20        - name: container3-myapp2
21          image: busybox
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: myapp3
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: myapp3
10  template:
11    metadata:
12      labels:
13        app: myapp3
14    spec:
15      containers:
16        - name: container1-myapp3
17          image: busybox
18        - name: container2-myapp3
19          image: busybox
20        - name: container3-myapp3
21          image: busybox

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

1import glob
2import yaml
3from tabulate import tabulate
4
5headers = ["Pod name", "Container name"]
6table = []
7
8files = glob.glob("./yaml/*.yaml")
9for file in files:
10    with open(file) as f:
11        yaml_obj = yaml.safe_load(f)
12    for container in yaml_obj["spec"]["template"]["spec"]["containers"]:
13        table.append([yaml_obj["metadata"]["name"], container["name"]])
14
15print(tabulate(table, headers, tablefmt="github"))
1| Pod name | Container name    |
2| -------- | ----------------- |
3| myapp1   | container1-myapp1 |
4| myapp1   | container2-myapp1 |
5| myapp1   | container3-myapp1 |
6| myapp2   | container1-myapp2 |
7| myapp2   | container2-myapp2 |
8| myapp2   | container3-myapp2 |
9| myapp3   | container1-myapp3 |
10| myapp3   | container2-myapp3 |
11| myapp3   | container3-myapp3 |

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee