# 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")