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
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() |