🎄
Python で Markdown を Html に変換する(基本編)
環境:
> python -V
Python 3.9.5
Windows で動かしていますがきっと OS 依存の部分はないはずっ…。
コード
convert.py
import argparse
from pathlib import Path
import mistletoe
# ファイルの読み込み
def read_file(file_path:str) -> str:
with open(file_path, "r", encoding="utf-8") as input_file:
return input_file.read()
# ファイルへ書き出し
def write_file(file_path:str, html_str:str) -> None:
with open(file_path, "w", encoding="utf-8") as output_file:
output_file.write(html_str)
# body タグの中身に変換する
def get_body(md_str:str) -> dict:
markup = mistletoe.markdown(md_str)
return "\n".join([
'<body>',
markup,
'</body>'
])
# メイン処理
def main(file_path:str) -> None:
md_path = Path(file_path)
if md_path.suffix != ".md":
return
md_str = read_file(file_path)
body = get_body(md_str)
head = "\n".join([
r'<meta charset="utf-8">',
r'<base target="_blank">', # リンクは新規タブで開く
r'<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">', # viewport を設定しておく
])
markup = "\n".join([
'<!DOCTYPE html>',
'<html lang="ja">',
head,
body,
'</html>'
])
out_path = md_path.with_name(md_path.stem + ".html")
write_file(out_path, markup)
# コマンドライン引数をパースして実行
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("filePath", type=str)
args = parser.parse_args()
main(args.filePath)
コマンドライン引数に md ファイルのパスを指定してやり、処理が無事に完了すれば同じディレクトリに html に変換したファイルが書き出されます。
> python .\convert.py .\ほげほげ.md
mistletoe(ライブラリ)
定番のライブラリとして Python-Markdown を使うのもありですが今回は mistletoe を使ってみました。
Pure Python の Markdown パーサで速さが売りとのことです。
まだ使いこなせていませんがカスタムトークンも使用可能で拡張性の高さも相当とのこと。
Python-Markdown では表( <Table>
)や打ち消し線( <Del>
)の変換のためにいくつか 拡張機能 を追加する必要があるのに対し、mistletoe では最初から全部入りなので大変お手軽でした。
次回の 応用編 では mistletoe のカスタム記法にチャレンジします!
Discussion