import os import re def modify_doc_title_dir(abspath_rstfiles_dir): """ rst文件中:有‘========’和‘----------’行的表示其行上一行的文字是标题, ‘=’和‘-’要大于等于标题的长度。 使用sphinx-apidoc -o ./source/rst_files /home/myubuntu/pro/mypro命令将 生成rst文件放在./source/rst_files目录下, 执行sphinx-quickstart命令生成的 index.rst不用放到这个目录中。 或在source目录下新建 rst_files目录然后将rst文件剪切到这个目录下,修改后再剪切出来 生成rst文件后将rst_files/modules.rst文件中的标题去掉,并修改maxdepth字段。 删除和修改使用sphinx-apidoc -o 命令的生成的rst文件中的标题 :param abspath_rstfiles_dir: rst文件所在的文件夹的绝对路径 :return: """ rst_files = os.listdir(abspath_rstfiles_dir) # 要删除的节点(标题目录的节点) del_nodes = ["Submodules", "Module contents", "Subpackages"] # 要删除的标题中的字符串 del_str = [" module", " package"] # datasets需要的部分 dataset_list = ["datasets", "dataset"] # 需要call方法 add_call_files = [ "data.collate", "data.iterator", "data.sampler", "data.tokenizer", "data.vocab", "tokenizer\_utils", ] # 删除inheritance del_inheritance = [ "crf", "tcn", "distributed", "dataset", "paraller", "decoder", "rdrop", "decoding", "fast\_transformer", "Adamoptimizer", "attention\_utils", "model\_utils", "batch\_sampler", "model", ] # 文档中空白的part,不显示 del_rst = ["iterator", "constant"] for rst_file in rst_files: f = open(os.path.join(abspath_rstfiles_dir, rst_file), "r") file_lines = f.readlines() f.close() write_con = [] flag = 0 first_line = file_lines[0] # 去除不需要的datasets if "datasets" in first_line: name = first_line.split()[0] length = len(name.split(".")) # paddlenlp.datasets 需要留下 if length > 2: if "datasets.dataset" not in first_line: path = os.path.join(abspath_rstfiles_dir, rst_file) print(path) os.remove(path) print(path) continue # 去除文档中空白页面,目前是data.iterator, embeddings.constant部分 del_rst_flag = 0 for pattern in del_rst: if pattern in first_line: path = os.path.join(abspath_rstfiles_dir, rst_file) os.remove(path) del_rst_flag = 1 break if del_rst_flag == 1: continue # 是否加入call add_call_files_flag = 0 for i in add_call_files: if i in first_line: add_call_files_flag = 1 # 是否删除inheritance del_inheritance_flag = 0 for j in del_inheritance: if j in first_line: del_inheritance_flag = 1 if "modeling" in first_line: del_inheritance_flag = 0 for file_line in file_lines: if file_line.strip() in del_nodes: flag = 1 continue if flag: flag = 0 continue if re.search(del_str[0], file_line): length = len(file_line.split(".")) if length > 2: modify_line = file_line.split(".")[-1].replace(del_str[0], "") else: modify_line = file_line.replace(del_str[0], "") write_con.append(modify_line) continue if re.search(del_str[1], file_line): length = len(file_line.split(".")) if length > 2: modify_line = file_line.split(".")[-1].replace(del_str[1], "") else: modify_line = file_line.replace(del_str[1], "") write_con.append(modify_line) continue if "undoc-members" in file_line: if "no-undoc-members" not in file_line: file_line = file_line.replace("undoc-members", "no-undoc-members") # 去除datasets中多余内容 if "paddlenlp.datasets" in file_line: last_name = file_line.split(".")[-1] if last_name.strip() not in dataset_list: continue if "show-inheritance" in file_line: if del_inheritance_flag == 0: write_con.append(file_line) else: write_con.append(file_line) if add_call_files_flag == 1: write_con.append(" :special-members: __call__\n") f = open(os.path.join(abspath_rstfiles_dir, rst_file), "w") f.writelines(write_con) f.close() if __name__ == "__main__": modify_doc_title_dir("./source")