-
Notifications
You must be signed in to change notification settings - Fork 0
/
json_to_md.py
239 lines (201 loc) · 9.48 KB
/
json_to_md.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# -*- encoding: utf-8 -*-
"""
@File : json_to_md.py
@Time : 2023-03-09, 周四, 9:33
@Author : 焦棚子
@Email : [email protected]
@Blog : https://jiaopengzi.com/
@Version : 1.0.0
@Description : json 转换到 markdown 格式.
"""
import os
from utils import Utils
class JTM(object):
""" json to md 的简写
"""
# 函数表头
field_fun3 = '| 函数名称 | 描述 | 链接 |'
# markdown 表格标识
table_mark3 = '| :--: | :--: |:--: |'
# mvp 查询参数
mvp_query = "?WT.mc_id=DP-MVP-5005257"
def contents_category(self, category: dict, md_list: list, cols: int = 3) -> list:
"""目录按照功能分类
:param category: 分类的字典
:param md_list: 生成 md 的 list 源
:param cols: 需要生成几列,默认 3 列
:return: 更新后的 md_list
"""
line = ""
md_list.extend(
(
'<h2 id="home"><a href="https://jiaopengzi.com/doc" class="a-button">点击返回主页</a></h2><span id="jiaopengzi"><a href="https://jiaopengzi.com/">焦棚子</a>整理</span>',
'<h2 id="content">目录</h2>',
)
)
for index, c in enumerate(category):
# text = f"**[{index + 1}、{c}](#{index + 1}-{c})**"
text = f'**<a href="#{index + 1}">{index + 1}、{c}({category[c]})</a>**'
count = len(category)
col = index % cols
rows = len(category) // cols
if col == 0:
line = f'| {text} '
if index // 3 == rows and index == count - 1: # 处理最后一行
md_list.append(f'{line}| | |')
elif col == 1:
line = f'{line}| {text} '
if index // cols == rows and index == count - 1:
md_list.append(f'{line}| |')
elif col == 2:
line = f'{line}| {text} |'
md_list.append(line)
md_list.insert(4, self.table_mark3)
return md_list
@staticmethod
def contents_capital(category: dict, md_list: list) -> list:
"""目录按照首字母分类
:param category: 分类的字典
:param md_list: 生成 md 的 list 源
:return: 更新后的 md_list
"""
line = ""
md_list.extend(
(
'<h2 id="home"><a href="https://jiaopengzi.com/doc" class="a-button">点击返回主页</a></h2><span id="jiaopengzi"><a href="https://jiaopengzi.com/">焦棚子</a>整理</span>',
'<h2 id="content">目录</h2>',
)
)
for index, c in enumerate(category):
line = f'{line}**<a href="#{index + 1}" >{c}({category[c]})</a>** '
md_list.append(line)
return md_list
def json_to_m_md_category(self):
"""通过 json 拼接成 m 函数 markdown 文件 (功能分类版)
:return: markdown 文件路径
"""
path_m = os.path.join(Utils.base_dir(), "m.json")
m_dic = Utils.read_json(path_m)
# 字典去重获取分类
category = {m_dic[item]["category-zh-cn"]: "category" for item in m_dic}
for c in category:
i = sum(c == m_dic[item]["category-zh-cn"] for item in m_dic)
category[c] = i
h1 = '# Power Query M 函数文档(功能分类版)'
md_list = [h1]
self.contents_category(category, md_list)
for index, c in enumerate(category):
# 换行显示目录返回锚点
h2 = f"<h2 id='{index + 1}'>{index + 1}、{c}</h2>\n<a href='#content'>返回目录</a>"
md_list.append(h2) # 二级标题
md_list.append(self.field_fun3)
md_list.append(self.table_mark3)
for key in m_dic:
if m_dic[key]["category-zh-cn"] == c:
# 描述中只取第一句简单介绍。
des = m_dic[key]["description-zh-cn"].replace("\n", " ").strip()
des = f'{des.split("。")[0]}。'
line_n = f'| {key} | {des} | [中文]({m_dic[key]["url-zh-cn"]}{self.mvp_query}) [英文]({m_dic[key]["url-en-us"]}{self.mvp_query}) |'
# line_n = line_n.replace("\n", " ")
md_list.append(line_n)
path_md = os.path.join(Utils.base_dir(), "m-category.md")
md_str = "\n".join(md_list)
return Utils.write_str_in_file(path_md, md_str)
def json_to_m_md_sort(self):
"""通过 json 拼接成 m 函数 markdown 文件 (首字母排序版)
:return: markdown 文件路径
"""
path_m = os.path.join(Utils.base_dir(), "m.json")
m_dic = Utils.read_json(path_m)
keys = sorted(m_dic.keys(), reverse=False)
h1 = '# Power Query M 函数文档(首字母排序版)'
md_list = [h1]
category = {key[0].upper(): "category" for key in keys}
for c in category:
i = sum(item[0].upper() == c for item in m_dic)
category[c] = i
md_list = self.contents_capital(category, md_list)
for index, capital in enumerate(category):
# 换行显示目录返回锚点
h2 = f"<h2 id='{index + 1}'>{capital}</h2>\n<a href='#content'>返回目录</a>"
md_list.append(h2)
md_list.append(self.field_fun3)
md_list.append(self.table_mark3)
for key in keys:
if key[0].upper() == capital:
# 描述中只取第一句简单介绍。
des = m_dic[key]["description-zh-cn"].replace("\n", " ").strip()
des = f'{des.split("。")[0]}。'
line_n = f'| {key} | {des} | [中文]({m_dic[key]["url-zh-cn"]}{self.mvp_query}) [英文]({m_dic[key]["url-en-us"]}{self.mvp_query}) |'
md_list.append(line_n)
path_md = os.path.join(Utils.base_dir(), "m-sort.md")
md_str = "\n".join(md_list)
return Utils.write_str_in_file(path_md, md_str)
def json_to_dax_md_category(self):
"""通过 json 拼接成 dax 函数 markdown 文件 (功能分类版)
:return: markdown 文件路径
"""
path_dax = os.path.join(Utils.base_dir(), "dax.json")
dax_dic = Utils.read_json(path_dax)
# 字典去重获取分类
category = {dax_dic[item]["category-zh-cn"]: "category" for item in dax_dic}
# category = {dax_dic[item]["category-zh-cn"]: "category" for item in dax_dic}
for c in category:
i = sum(c == dax_dic[item]["category-zh-cn"] for item in dax_dic)
category[c] = i
h1 = '# DAX 函数文档(功能分类版)'
md_list = [h1]
self.contents_category(category, md_list)
for index, c in enumerate(category):
# 换行显示目录返回锚点
h2 = f"<h2 id='{index + 1}'>{index + 1}、{c}</h2>\n<a href='#content'>返回目录</a>"
md_list.append(h2)
md_list.append(self.field_fun3)
md_list.append(self.table_mark3)
for key in dax_dic:
if dax_dic[key]["category-zh-cn"] == c:
# 描述中只取第一句简单介绍。
des = dax_dic[key]["description-zh-cn"].replace("\n", " ").strip()
des = f'{des.split("。")[0]}。'
line_n = f'| {key} | {des} | [中文]({dax_dic[key]["url-zh-cn"]}{self.mvp_query}) [英文]({dax_dic[key]["url-en-us"]}{self.mvp_query}) [SQLBI]({dax_dic[key]["url-dax-guide"]}) |'
md_list.append(line_n)
path_md = os.path.join(Utils.base_dir(), "dax-category.md")
md_str = "\n".join(md_list)
return Utils.write_str_in_file(path_md, md_str)
def json_to_dax_md_sort(self):
"""通过 json 拼接成 dax 函数 markdown 文件 (首字母排序版)
:return: markdown 文件路径
"""
path_dax = os.path.join(Utils.base_dir(), "dax.json")
dax_dic = Utils.read_json(path_dax)
keys = sorted(dax_dic.keys(), reverse=False)
h1 = '# DAX 函数文档(首字母排序版)'
md_list = [h1]
# 字典去重获取分类
category = {key[0].upper(): "category" for key in keys}
for c in category:
i = sum(item[0].upper() == c for item in dax_dic)
category[c] = i
md_list = self.contents_capital(category, md_list)
for index, capital in enumerate(category):
h2 = f"<h2 id='{index + 1}'>{capital}</h2>\n<a href='#content'>返回目录</a>"
md_list.append(h2)
md_list.append(self.field_fun3)
md_list.append(self.table_mark3)
for key in keys:
if key[0].upper() == capital:
# 描述中只取第一句简单介绍。
des = dax_dic[key]["description-zh-cn"].replace("\n", " ").strip()
des = f'{des.split("。")[0]}。'
line_n = f'| {key} | {des} | [中文]({dax_dic[key]["url-zh-cn"]}{self.mvp_query}) [英文]({dax_dic[key]["url-en-us"]}{self.mvp_query}) [SQLBI]({dax_dic[key]["url-dax-guide"]}) |'
md_list.append(line_n)
path_md = os.path.join(Utils.base_dir(), "dax-sort.md")
md_str = "\n".join(md_list)
return Utils.write_str_in_file(path_md, md_str)
if __name__ == "__main__":
jtm = JTM()
jtm.json_to_dax_md_category()
jtm.json_to_dax_md_sort()
jtm.json_to_m_md_category()
jtm.json_to_m_md_sort()
print("生成完毕!")