【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. - 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 については下記を参照してください。
【Python】yamlを扱う
はじめに Python で Yaml ファイルを扱える PyYAML についてざっと紹介します。
まずは、下記のように複数のマニフェストを用意します。
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 |