Files
comments-for-awesome-courses/update.py
2021-08-21 23:00:17 +08:00

72 lines
2.7 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from urllib.parse import quote
EXCLUDE_DIRS = ['.git', 'docs', '.vscode', '.circleci', 'site']
README_MD = ['README.md', 'readme.md', 'index.md']
TXT_EXTS = ['md', 'txt']
TXT_URL_PREFIX = 'https://github.com/conanhujinming/comments-for-awesome-courses/blob/main/'
BIN_URL_PREFIX = 'https://github.com/conanhujinming/comments-for-awesome-courses/raw/main/'
def list_files(course: str):
filelist_texts = '## 文件列表\n\n'
readme_path = ''
for root, dirs, files in os.walk(course):
files.sort()
level = root.replace(course, '').count(os.sep)
indent = ' ' * 4 * level
filelist_texts += '{}- {}\n'.format(indent, os.path.basename(root))
subindent = ' ' * 4 * (level + 1)
for f in files:
if f not in README_MD:
if f.split('.')[-1] in TXT_EXTS:
filelist_texts += '{}- [{}]({})\n'.format(subindent,
f, TXT_URL_PREFIX + quote('{}/{}'.format(root, f)))
else:
filelist_texts += '{}- [{}]({})\n'.format(subindent,
f, BIN_URL_PREFIX + quote('{}/{}'.format(root, f)))
elif root == course and readme_path == '':
readme_path = '{}/{}'.format(root, f)
return filelist_texts, readme_path
def generate_md(course: str, filelist_texts: str, readme_path: str, topic: str):
final_texts = ['\n\n'.encode(), filelist_texts.encode()]
if readme_path:
with open(readme_path, 'rb') as file:
final_texts = file.readlines() + final_texts
topic_path = os.path.join('docs', topic)
if not os.path.isdir(topic_path):
os.mkdir(topic_path)
with open(os.path.join(topic_path, '{}.md'.format(course)), 'wb') as file:
file.writelines(final_texts)
if __name__ == '__main__':
if not os.path.isdir('docs'):
os.mkdir('docs')
topics = list(filter(lambda x: os.path.isdir(x) and (
x not in EXCLUDE_DIRS), os.listdir('.'))) # list topics
for topic in topics:
topic_path = os.path.join('.', topic)
courses = list(filter(lambda x: os.path.isdir(os.path.join(topic_path, x)) and (
x not in EXCLUDE_DIRS), os.listdir(topic_path))) # list courses
for course in courses:
course_path = os.path.join(".", topic, course)
filelist_texts, readme_path = list_files(course_path)
generate_md(course, filelist_texts, readme_path, topic)
with open('README.md', 'rb') as file:
mainreadme_lines = file.readlines()
with open('docs/index.md', 'wb') as file:
file.writelines(mainreadme_lines)