106 lines
3.8 KiB
Python
106 lines
3.8 KiB
Python
# coding:utf-8
|
||
|
||
import os
|
||
from color_print import printDarkYellow
|
||
"""
|
||
作者:雪山凌狐
|
||
网址:http://fox-9.com
|
||
修订时间:2022-09-14
|
||
|
||
写书好伴侣,自动目录生成器
|
||
目录需满足条件:
|
||
1.各个章节使用`chapter+章节`数字的方式来写,且每个文件夹里面都有一个README.md文件,文件第一行是一级标题的章节名
|
||
2.各课时md文件存放到各自的章节目录里面,课时的文件名跟需要生成的课时名一致,且文件名开头为章节数字-数字序号(如第一章第一节为 1-1),序号结束后空格后再写其他内容
|
||
3.章节的目录中除了assets文件夹以外不要有其他文件夹了
|
||
|
||
运行后会自动生成目录树和目录两个文件供使用
|
||
"""
|
||
|
||
# 生成gitbook目录树的文件
|
||
summarytree_filename = "CATALOG_FOR_GITBOOK.md"
|
||
# 一个课程目录文件
|
||
catalog_filename = "Catalog.md"
|
||
# 课程总结文件名
|
||
summary_filename = "Summary.md"
|
||
# 首页的README.md文件在生成的网站中的标题
|
||
readme_name = "Python3小白课 介绍"
|
||
|
||
|
||
def get_catalog(folder):
|
||
"""自动生成目录"""
|
||
# 获取有哪几个章节列表
|
||
dirs = os.listdir(folder)
|
||
chapter_dir = []
|
||
for path in dirs:
|
||
whole_path = os.path.join(folder, path)
|
||
if os.path.isdir(whole_path):
|
||
if path.startswith("chapter"):
|
||
chapter_dir.append(whole_path)
|
||
chapter_dir.sort()
|
||
|
||
# 初始化summarytree文件
|
||
if os.path.exists(summarytree_filename):
|
||
os.remove(summarytree_filename)
|
||
with open(summarytree_filename, "a", encoding="utf-8") as f:
|
||
f.write("# Summary\n\n")
|
||
f.write("* [%s](./README.md)\n" % readme_name)
|
||
f.write("* [课程目录](./Catalog.md)\n\n")
|
||
|
||
# 初始化catalog文件
|
||
if os.path.exists(catalog_filename):
|
||
os.remove(catalog_filename)
|
||
with open(catalog_filename, "a", encoding="utf-8") as f:
|
||
f.write("# 课程目录\n\n")
|
||
|
||
# 写具体章节内容
|
||
for chapter in chapter_dir:
|
||
readme_path = os.path.join(chapter, "README.md")
|
||
with open(readme_path, "r", encoding="utf-8") as f:
|
||
chapter_name = f.readline().strip().replace("# ", "")
|
||
filelist = os.listdir(chapter)
|
||
try:
|
||
filelist.remove("README.md")
|
||
except Exception as e:
|
||
pass
|
||
try:
|
||
filelist.remove("assets")
|
||
except Exception as e:
|
||
pass
|
||
filelist.sort(key=return_index, reverse=False)
|
||
# print(filelist)
|
||
|
||
# 写summarytree文件内容
|
||
with open(summarytree_filename, "a", encoding="utf-8") as f:
|
||
f.write("* [{name}]({path})\n".format(name=chapter_name,
|
||
path=chapter + "/README.md"))
|
||
for cur_file in filelist:
|
||
f.write("\t* [{name}]({path})\n".format(
|
||
name=os.path.splitext(cur_file)[0],
|
||
path=chapter + "/" + cur_file))
|
||
|
||
# 写catalog文件内容
|
||
with open(catalog_filename, "a", encoding="utf-8") as f:
|
||
f.write("* ### [{name}]({path})\n".format(name=chapter_name,
|
||
path=chapter))
|
||
for cur_file in filelist:
|
||
cur_file_name = os.path.splitext(cur_file)[0]
|
||
f.write("\t* [{name}]({path})\n".format(
|
||
name=cur_file_name,
|
||
path=chapter + "/" + cur_file_name + ".html"))
|
||
|
||
# 写课程总结summary链接
|
||
with open(summarytree_filename, "a", encoding="utf-8") as f:
|
||
f.write("\n* [课程总结](./%s)\n" % summary_filename)
|
||
|
||
|
||
def return_index(filename):
|
||
"""返回文件名的序号"""
|
||
index1 = filename.find("-")
|
||
index2 = filename.find(" ")
|
||
return int(filename[index1 + 1:index2])
|
||
|
||
|
||
if __name__ == '__main__':
|
||
get_catalog("./")
|
||
printDarkYellow("生成目录完成!\n\n")
|