這玩意折騰了一天才搞定,Markdown踩坑了。
這裏備份一下代碼,避免丟失!
我已經打包成了軟件,需要的自取:
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文件,已跳過')