""" Counts the number of records each subfolder and updates the overview. Sorts the entries in the contents files of each subfolder alphabetically. TODO check for external dead links (if desired, only now and then) """ import os import re readme_regex = re.compile(r"- \[(.+)\]\((.+)\/_toc.md\)") toc_regex = re.compile(r"- \[(.+)\]\((.+)\)") if __name__ == "__main__": # readme file location base_path = os.path.abspath(os.path.dirname(__file__)) readme_path = os.path.join(base_path, 'README.md') # read readme with open(readme_path) as f: readme_lines = f.readlines() # apply regex search on all lines matched_lines = [readme_regex.findall(line) for line in readme_lines] # empty subfolder list subfolders = [] # loop over the lines for line, match in enumerate(matched_lines): if match: # get first group (should be only one) match = match[0] # add to subfolders list subfolders.append(match[1]) # subfolder path subfolder_path = os.path.join(base_path, match[1]) # get number of files in that path (-1 for _toc.md) n = len(os.listdir(subfolder_path)) - 1 # generate new line readme_lines[line] = "- [{}]({}/_toc.md) ({})\n".format(match[0], match[1], n) # write readme again with open(readme_path, "w") as f: f.writelines(readme_lines) # loop over all subfolders for subfolder in subfolders: # get contents file of that subfolder toc_path = os.path.join(base_path, subfolder, '_toc.md') # read contents file with open(toc_path) as f: toc = f.readlines() # only if there are at least 4 lines (header, empty, two entries) if len(toc) >= 4: # apply regex search on all entries (should work on all) matched_entries = [toc_regex.findall(line)[0] for line in toc[2:]] # sort according to first entry matched_entries.sort(key=lambda x: x[0]) # generate links again lines = ["- [{}]({})\n".format(*match) for match in matched_entries] # reassemble toc toc = toc[0:2] toc.extend(lines) # write contents file again with open(toc_path, "w") as f: f.writelines(toc)