- readme或markdown目錄自動(dòng)生成逆趣。
- 使用腳本生成回梧,可控。
"""
module(main) - 生成readme的目錄,腳本自動(dòng)去掉第一個(gè)#以前的內(nèi)容有送,并在開頭添加目錄.
Main members:
# __main__ - 主函數(shù).
"""
import codecs
from collections import defaultdict
import re
def read_file_texts(file_name):
"""讀取文件內(nèi)容.
Args:
file_name: 文件名.
Returns:
文件內(nèi)容列表胃榕,元素為每行.
"""
with codecs.open(file_name, mode='r', encoding='utf8') as fr:
texts = list()
for line in fr:
texts.append(line)
return texts
def get_contents(file_texts):
""" 獲取內(nèi)容列表盛险,忽略掉開頭的目錄.
@params:
file_texts - 文件內(nèi)容.
@return:
On success - 標(biāo)題列表.
"""
contents_lines = list()
content_flag = False
for row_data in file_texts:
if not content_flag:
# 正文開頭判斷,以單獨(dú)的#作為開頭
re_obj = re.match('#+', row_data)
if re_obj and len(re_obj.group()) == 1:
content_flag = True
contents_lines.append(row_data)
continue
contents_lines.append(row_data)
return contents_lines
def get_head_texts(contents):
""" 提取標(biāo)題列表.
@params:
contents - 文件內(nèi)容.
@return:
On success - 標(biāo)題列表.
"""
head_lines = list()
code_line_flag = False
# 提取標(biāo)題文本勋又,并對(duì)重復(fù)的文本自動(dòng)補(bǔ)充后綴
fixed_contents = list()
head_count_dict = defaultdict(int) # 初始化為 0
for row_data in contents:
# 代碼注釋判斷
if code_line_flag:
if row_data.startswith('~~~'):
code_line_flag = False
elif row_data.startswith('~~~'):
code_line_flag = True
elif row_data.startswith('#'):
head_count_dict[row_data] += 1
head_count = head_count_dict[row_data]
if head_count > 1:
row_data = '{}-{}\n'.format(row_data.strip(), head_count)
head_lines.append(row_data)
fixed_contents.append(row_data)
# 構(gòu)造帶有超鏈接的目錄
head_texts = list()
for head_line in head_lines:
level_chars = re.match('#+', head_line).group()
head_text = head_line.lstrip(level_chars).strip()
tab_str = ''.join([' ' for i in range(len(level_chars)-1)])
head_href_text = head_text.replace(' ', '-')
head_texts.append('{}- [{}](#{})\n'.format(tab_str, head_text, head_href_text))
return head_texts, fixed_contents
if __name__ == "__main__":
""" readme生成目錄.
參考:https://github.com/houbb/markdown-toc/blob/master/doc/Github-MD-Href.md
"""
file_ins = ['readme_tools.md', 'readme_model.md']
for file_in in file_ins:
file_texts = read_file_texts(file_in)
contents = get_contents(file_texts)
head_texts, contents = get_head_texts(contents)
with codecs.open(file_in, mode='w', encoding='utf8') as fw:
# 目錄輸出
fw.write('**目錄(Table of contents)**')
fw.write('\n\n')
for line in head_texts:
fw.write(line)
fw.write('\n')
fw.write('\n')
# 原始文本內(nèi)容輸出
for line in contents:
fw.write(line)
print('{} 目錄已更新完畢'.format(file_in))