You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.6 KiB
Python

import os
import re
from pathlib import Path
def get_first_title(md_path):
with open(md_path, 'r', encoding='utf-8') as file:
for line in file:
match = re.match(r'^#\s+(.*)', line.strip())
if match:
return match.group(1)
return "Untitled"
def extract_leading_number(filename):
match = re.match(r'^(\d{1,2})[_\- ]', filename)
return match.group(1) if match else None
def generate_markdown_table(directory):
entries = []
for filename in os.listdir(directory):
if filename.endswith('.md'):
number = extract_leading_number(filename)
if number is None:
continue # Skip files without leading number
filepath = os.path.join(directory, filename)
title = get_first_title(filepath)
entries.append((int(number), number, title, filename))
entries.sort(key=lambda x: x[0])
table = ["| # | Lecture | Slides |", "|:------|:-----|:------|"]
for _, number, title, filename in entries:
table.append(f"| {number} | [{title}]({filename}) | [Download slides]({Path(filename).stem}-slides.html) |")
return '\n'.join(table)
def main():
directory = "./../" # current directory, or change to any other path
output_file = directory + "README.md"
table_md = generate_markdown_table(directory)
with open(output_file, 'a', encoding='utf-8') as f:
f.write("# Contents\n\n")
f.write(table_md)
f.write("\n")
print(f"Index written to {output_file}")
if __name__ == "__main__":
main()