It took an entire day to figure this thing out – I really ran into some issues with Markdown.
Back up your code here to prevent loss!
I have packaged it as software; please collect it in person if needed:
https://www.4s5.cn/archives/1310.html
隐藏内容:付费阅读
import os
import re
import logging
import markdown
print("软件作者QQ:1810216796\n站长技术交流群:958972323,欢迎大家加入交流!")
# 创建md和html目录
if not os.path.exists('md'):
os.makedirs('md')
if not os.path.exists('html'):
os.makedirs('html')
# 设置日志记录
logging.basicConfig(filename='markdown_conversion.log', level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s', encoding='utf-8')
# 获取用户输入的文件后缀名
md_file_extension = input('请输入存放Markdown文件的后缀名(如.md):').strip()
if not md_file_extension.startswith('.'):
md_file_extension = '.' + md_file_extension
# 获取用户输入的HTML文件后缀名
html_file_extension = input('请输入要生成的HTML文件的后缀名(如.html):').strip()
if not html_file_extension.startswith('.'):
html_file_extension = '.' + html_file_extension
# 检查并修复Markdown语法和格式
def check_and_fix_md(md_text, file_name):
try:
html_text = markdown.markdown(
md_text, extensions=['codehilite', 'fenced_code', 'tables'])
logging.info(f'成功将"{file_name}"转换为HTML')
except Exception as e:
error_msg = str(e)
logging.error(f'转换Markdown文件"{file_name}"时出错: {error_msg}')
if error_msg.startswith('unexpected indent'):
md_text = re.sub(r'\n\s+', '\n', md_text)
elif error_msg.startswith('expected block end'):
md_text = re.sub(r'\n\n+', '\n\n', md_text)
html_text = markdown.markdown(
md_text, extensions=['codehilite', 'fenced_code', 'tables'])
logging.info(f'成功将"{file_name}"转换为HTML')
return html_text
# 遍历md目录下的Markdown文件,将其转换为HTML代码并保存到html目录中
for file_name in os.listdir('md'):
if file_name.endswith(md_file_extension):
# 读取Markdown文件
with open(os.path.join('md', file_name), 'r', encoding='utf-8') as f:
md_text = f.read()
# 检查并修复Markdown语法和格式
html_text = check_and_fix_md(md_text, file_name)
# 保存为HTML文件
html_file_name = os.path.splitext(file_name)[0] + html_file_extension
with open(os.path.join('html', html_file_name), 'w', encoding='utf-8') as f:
f.write(html_text)
logging.info(f'成功将"{file_name}"转换为"{html_file_name}"')
print(f'成功将"{file_name}"转换为"{html_file_name}"')
else:
logging.warning(f'文件"{file_name}"不是Markdown文件,已跳过')
print(f'文件"{file_name}"不是Markdown文件,已跳过')