Python-Markdownを使用してMarkdownテキストをHTMLに変換する方法
著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
Markdown は、読みやすいテキスト形式でコンテンツを書き込むプロセスを簡素化するために一般的に使用されるマークアップ言語であり、ソフトウェアツールまたはプログラミングライブラリがHTMLに変換して表示できます。ブラウザまたは別の書き込みプログラム。 プレーンテキスト構文を使用しているため、Markdownは任意のテキストエディタと互換性があり、見出し、リスト、リンク、およびその他のコンポーネントを変換できます。 ブロガー、チュートリアル作成者、ドキュメント作成者はMarkdownを広く使用しており、 Github 、 StackOverflow 、 Python Package Index(PyPI)などのWebサイトでサポートされています。
Markdown構文標準からMarkdownの使用方法を学ぶことができます。 または、 DigitalOcean MarkdownPreviewやStackEditエディターなど、Webエディターで別のMarkdown実装を試すこともできます。
Python-Markdown は、さまざまな方法でMarkdownテキストをHTMLに変換できるPythonライブラリです。 追加機能を提供するさまざまな拡張機能を使用して、その機能を拡張できます。 ただし、Python-Markdownには、標準のMarkdown構文とのわずかな違いがあることに注意してください。
このチュートリアルでは、 Python-Markdown ライブラリをインストールし、それを使用してMarkdown文字列をHTMLに変換し、MarkdownファイルをHTMLファイルに変換し、Python-Markdownコマンドラインインターフェイスを使用してMarkdownをHTMLに変換します。
前提条件
このガイドに従う前に、次のものが必要です。
- ローカルのPython3プログラミング環境。 Python3シリーズのローカルプログラミング環境をインストールおよびセットアップする方法のチュートリアルに従ってください。 このチュートリアルでは、プロジェクトディレクトリを
pymark
と呼びます。 - PythonとHTMLの基本的な概念を理解しているので、 Python3でコーディングする方法とHTMLを使用してWebサイトを構築する方法チュートリアルシリーズの背景知識を確認できます。
ステップ1—Pythonのインストール-Markdown
このステップでは、Python-Markdownをインストールし、 PythonREPLでMarkdown文字列をHTMLに変換する関数の1つを調べます。
プログラミング環境をまだアクティブ化していない場合は、プロジェクトディレクトリ(pymark
)にいることを確認し、次のコマンドを使用して環境をアクティブ化します。
source env/bin/activate
プログラミング環境をアクティブにすると、プロンプトに次のようなenv
プレフィックスが付けられます。
次に、Pythonパッケージをインストールし、プロジェクトコードをメインのPythonシステムインストールから分離します。
次のコマンドを実行して、pip
を使用してPython-Markdownライブラリ(markdown
)をインストールします。
pip install markdown
インストールが正常に完了したら、Python REPLで実験できます。これは、次のコマンドを入力して開くことができます。
python
プレフィックス>>>
が付いた新しいプロンプトが表示されます。 これを使用してPythonコードを入力し、すぐに出力を受け取ることができます。
まず、markdown
パッケージをインポートし、それを使用してMarkdownテキストの一部をMarkdown構文からHTMLに変換します。
import markdown markdown.markdown('#Hi')
このコードでは、前にインストールしたmarkdown
パッケージをインポートします。 markdown.markdown()
関数を使用して、Markdownテキスト#Hi
(#
はH1レベルのヘッダーを表します)を同等のHTMLに変換します。 Python REPLにコードを入力すると、次の出力が表示されます。
Output'<h1>Hi</h1>'
HTML出力は、#Hi
マークダウンテキストと同等です。
トリプルシングルクォート()を使用して、次のように複数行のマークダウンテキストをPythonREPLに入力できます。
import markdown output = markdown.markdown(''' # Step 1 ## Step 2 * item 1 * item 2 Visit [the tutorials page](https://www.digitalocean.com/community/tutorials) for more tutorials! ''') print(output)
この例では、H1ヘッダー、H2ヘッダー、2つのリスト項目、およびリンクを含む段落を渡します。 次に、出力をoutput
という変数に保存し、print()
Python関数を使用して出力します。
次の出力が表示されます。
Output<h1>Step 1</h1> <h2>Step 2</h2> <ul> <li>item 1</li> <li>item 2</li> </ul> <p>Visit <a href="https://www.digitalocean.com/community/tutorials">the tutorials page</a> for more tutorials!</p>
出力は、提供されたマークダウンテキストのHTMLバージョンになります。
markdown
パッケージを使用してMarkdownテキストをHTMLに変換したので、Markdownファイルを読み取ってHTMLファイルに変換する小さなプログラムを作成します。
ステップ2—マークダウンファイルをHTMLに変換するプログラムを作成する
このステップでは、Markdownファイルを読み取り、markdown.markdown()
関数を使用してその内容をHTMLに変換し、HTMLコードを新しいファイルに保存するPythonプログラムを作成します。
まず、Picnic.md
という新しいファイルを開いて、マークダウンテキストを保持します。
nano Picnic.md
次のマークダウンテキストを入力します。
pymark / Picnic.md
# Things to bring * Food. * Water. * Knife. * Plates.
このファイルには、H1ヘッダーと4つのリストアイテムがあります。
完了したら、ファイルを保存して閉じます。
次に、convert.py
という新しいファイルを開いて、Picnic.md
マークダウンファイルをHTMLファイルに変換するためのコードを保持します。
nano convert.py
次のPythonコードを入力します。
pymark / convert.py
import markdown with open('Picnic.md', 'r') as f: text = f.read() html = markdown.markdown(text) with open('Picnic.html', 'w') as f: f.write(html)
ここでは、最初にmarkdown
パッケージをインポートします。 open()関数を使用して、Picnic.md
ファイルを開きます。 値'r'
をmodeパラメーターに渡して、Pythonが読み取り用に開く必要があることを示します。
ファイルオブジェクトをf
という変数に保存します。この変数を使用して、ファイルを参照できます。 次に、ファイルを読み取り、その内容をtext
変数内に保存します。 その後、markdown.markdown()
を使用してテキストを変換し、結果をhtml
という変数に保存します。
同じパターンで、書き込みモード('w'
)でPicnic.html
という新しいファイルを開き(このファイルはまだ存在しないことに注意してください)、html
の内容を書き込みます。ファイルへの変数。 これにより、新しいファイルが作成され、システムに保存されます。 ファイルを開くときにwith
ステートメントを使用すると、処理が終了するとPythonがファイルを閉じることが保証されます。
ファイルを保存して閉じます。
convert.py
プログラムを実行します。
python convert.py
これにより、プロジェクトディレクトリにPicnic.html
という名前の新しいファイルが次の内容で作成されます。
pymark / Picnic.html
<h1>Things to bring</h1> <ul> <li>Food.</li> <li>Water.</li> <li>Knife.</li> <li>Plates.</li> </ul>
markdown.markdown()
関数を使用してMarkdownファイルを開いて変換する方法がわかったので、PythonでMarkdownテキストを生成し、最初に読み取る必要なしにMarkdownファイルを変換できます。
ステップ3—データからマークダウンを生成してHTMLに変換する
このステップでは、 Python辞書からマークダウンテキストを生成し、それをマークダウンファイルに保存し、markdown.markdownFromFile()
関数を使用してマークダウンテキストをHTMLファイルに変換するプログラムを作成します。
プログラムは、国とその上位3大都市のリストを含むcities.md
というマークダウンファイルを生成します。 その後、プログラムは生成されたマークダウンテキストをHTMLに変換し、HTMLをcities.html
というファイルに保存します。
まず、citygen.py
という名前の新しいPythonファイルを開きます。
nano citygen.py
次に、次のPythonコードを追加します。
pymark / citygen.py
import markdown country_cities = {'Japan': ['Tokyo', 'Osaka', 'Nagoya'], 'France': ['Paris', 'Marseille', 'Lyon'], 'Germany': ['Berlin', 'Hamburg', 'Munich'], }
このコードでは、最初にimport markdown
を使用してPython-Markdownライブラリをインポートします。 次に、キーとしていくつかの国を含むcountry_cities
辞書を定義し、値として各国の最大3つの都市のリストを定義します。 この辞書はデータ構造の例です。 Web API、データベース、またはその他のデータソースから取得したデータに置き換えることができます。
次に、辞書の後に次のコードを追加します。
pymark / citygen.py
. . . with open('cities.md', 'bw+') as f: for country, cities in country_cities.items(): f.write('# {}\n'.format(country).encode('utf-8')) for city in cities: f.write('* {}\n'.format(city).encode('utf-8')) f.seek(0) markdown.markdownFromFile(input=f, output='cities.html')
データを保持する辞書を作成した後、with open(...) as ...
構文を使用してcities.md
というファイルを開きます。このファイルはまだ存在していません。 書き込みと読み取り('w+'
)のためにバイナリモード('b'
)で開きます。 文字列をmarkdown.markdownFromFile()
に渡すと、ファイルシステム上の読み取り可能なファイル(つまり、'/home/file.md'
)へのパスとして解釈されるため、バイナリモードを使用します。 また、バイナリモードを使用すると、文字をプラットフォーム固有の表現に変換することに関連する問題を回避できます。 これにより、Pythonプログラムがどのプラットフォームでも同じように動作することが保証されます。
次に、辞書の項目を調べて、国の名前を含む各キーを抽出し、それをcountry
変数に保存します。 これに加えて、国の最大の都市のリストを表す値を抽出し、それをcities
変数に保存します。
最初のloop内で、国の名前を#
Markdownヘッダー(<h1>
HTMLタグ)の新しいcities.md
ファイルに書き込みます。 \n
は、改行を挿入するための特殊文字です。 バイナリモードでファイルを開いたため、.encode()
を使用します。 2番目のfor
ループは各都市を繰り返し、その名前を*
リストアイテム(<li>
HTMLタグ)としてMarkdownファイルに書き込みます。
最初のループが終了すると、ファイルの最後に移動します。つまり、markdown.markdownFromFile()
はその内容を読み取ることができなくなります。 したがって、f.seek(0)
を使用して、ファイルの先頭に戻ります。 f
オブジェクトを入力としてmarkdown.markdownFromFile()
に渡す前に、それをHTMLに変換し、cities.html
という新しいファイルに保存します。
完了したら、ファイルを保存して閉じます。
citygen.py
プログラムを実行します。
python citygen.py
このコマンドは2つのファイルを生成します:
cities.md
:次の内容のマークダウンファイル:
pymark / citys.md
# Japan * Tokyo * Osaka * Nagoya # France * Paris * Marseille * Lyon # Germany * Berlin * Hamburg * Munich
cities.html
:cities.md
の内容を変換した結果を含むHTMLファイル:
pymark / citys.html
<h1>Japan</h1> <ul> <li>Tokyo</li> <li>Osaka</li> <li>Nagoya</li> </ul> <h1>France</h1> <ul> <li>Paris</li> <li>Marseille</li> <li>Lyon</li> </ul> <h1>Germany</h1> <ul> <li>Berlin</li> <li>Hamburg</li> <li>Munich</li> </ul>
関数markdown.markdownFromFile()
を使用して、既存のMarkdownファイルを変換することもできます。 たとえば、次のコードを使用して、Picnic.md
ファイルをPicnic-out.html
というファイルに変換できます。
example.py
import markdown markdown.markdownFromFile(input='Picnic.md', output='Picnic-out.html')
ファイルを変更する必要がない場合は、markdown.markdownFromFile()
関数を使用してファイルを直接変換できます。 Markdownファイルを変更する必要がある場合は、それを読み取ってから、ステップ2で示されている方法を使用して変換できます。
PythonコードでMarkdownテキストをHTMLに変換しましたが、Python-Markdownには、MarkdownファイルをHTMLにすばやく変換するための便利なコマンドラインインターフェイス(CLI)も用意されています。次のステップでこのツールを確認します。
ステップ4—Pythonの使用-Markdownのコマンドラインインターフェイス
このステップでは、Python-MarkdownのCLIを使用してMarkdownファイルをHTMLに変換して出力を印刷するか、HTMLファイルに保存します。
ライブラリモジュールをスクリプトとして実行するPythonでサポートされている-m
フラグを使用して、Python-Markdownコマンドラインスクリプトを実行できます。 たとえば、Markdownファイルを変換するには、次のようにmarkdown
コマンドに渡し、filename.md
を変換するファイルの名前に置き換えます。
python -m markdown filename.md
このコマンドを実行すると、filename.md
ファイルにあるマークダウンテキストのHTMLコードが出力されます。
たとえば、Picnic.md
ファイルを変換するには、次のコマンドを実行します。
python -m markdown Picnic.md
これにより、次の出力が出力されます。
Output<h1>Things to bring</h1> <ul> <li>Food.</li> <li>Water.</li> <li>Knife.</li> <li>Plates.</li> </ul>
出力をoutput.html
というファイルに保存するには、次のコマンドを使用します。
python -m markdown Picnic.md -f output.html
これで、markdown
コマンドラインインターフェイスを使用してMarkdownファイルをHTMLに変換できるようになりました。
結論
このチュートリアルでは、Pythonを使用してMarkdownテキストをHTMLに変換しました。 FlaskやDjangoなどのWebフレームワークを使用するWebアプリケーションなど、さまざまなコンテキストでMarkdown構文を利用する独自のPythonプログラムを作成できるようになりました。 Python-MarkdownとFlaskでアプリを構築する方法のチュートリアルについては、FlaskとSQLiteでPython-Markdownを使用する方法をお読みください。
Markdownの使用方法の詳細については、MarkdownのWebサイトを確認してください。 PythonでMarkdownを使用する方法の詳細については、Python-Markdownドキュメントを確認してください。
Python-Markdownによって公式にサポートされているいくつかの拡張機能は次のとおりです。
- Extra :略語の定義、さまざまなHTML要素、脚注、表、その他の機能への属性の追加など、標準のMarkdown構文に追加の機能を追加する拡張機能。
- CodeHilite :コードブロックに構文の強調表示を追加する拡張機能。
- 目次:Markdownドキュメントから目次を生成し、結果のHTMLドキュメントに追加する拡張機能。