Python-Markdownを使用してMarkdownテキストをHTMLに変換する方法
序章
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()
マークダウンテキストを変換する関数 #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
マークダウンテキストをHTMLに変換するパッケージでは、マークダウンファイルを読み取ってHTMLファイルに変換する小さなプログラムを作成します。
ステップ2—マークダウンファイルをHTMLに変換するプログラムを作成する
このステップでは、Markdownファイルを読み取り、その内容をHTMLに変換するPythonプログラムを作成します。 markdown.markdown()
関数を作成し、HTMLコードを新しいファイルに保存します。
まず、という新しいファイルを開きます Picnic.md
マークダウンテキストを保持するには:
- nano Picnic.md
次のマークダウンテキストを入力します。
# Things to bring
* Food.
* Water.
* Knife.
* Plates.
このファイルには、H1ヘッダーと4つのリストアイテムがあります。
完了したら、ファイルを保存して閉じます。
次に、という新しいファイルを開きます convert.py
変換するためのコードを保持する Picnic.md
HTMLファイルへのマークダウンファイル:
- nano convert.py
次のPythonコードを入力します。
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
.
同じパターンで、という新しいファイルを開きます Picnic.html
書き込みモード('w'
)—このファイルはまだ存在しないことに注意してください—そしてその内容を書き込みます html
ファイルへの変数。 これにより、新しいファイルが作成され、システムに保存されます。 を使用して with
ファイルを開くときのステートメントは、処理が終了するとPythonがファイルを閉じることを保証します。
ファイルを保存して閉じます。
を実行します convert.py
プログラム:
- python convert.py
これにより、という新しいファイルが作成されます 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辞書からマークダウンテキストを生成し、それをマークダウンファイルに保存し、を使用してマークダウンテキストをHTMLファイルに変換するプログラムを作成します。 markdown.markdownFromFile()
関数。
あなたのプログラムはと呼ばれるMarkdownファイルを生成します cities.md
国とその上位3大都市のリストがあります。 その後、プログラムは生成されたマークダウンテキストをHTMLに変換し、HTMLをというファイルに保存します。 cities.html
.
まず、という新しいPythonファイルを開きます citygen.py
:
- nano citygen.py
次に、次のPythonコードを追加します。
import markdown
country_cities = {'Japan': ['Tokyo', 'Osaka', 'Nagoya'],
'France': ['Paris', 'Marseille', 'Lyon'],
'Germany': ['Berlin', 'Hamburg', 'Munich'],
}
このコードでは、最初にPython-Markdownライブラリを次のようにインポートします。 import markdown
. 次に、 country_cities
キーとしていくつかの国を含み、値として各国の最大3つの都市のリストを含む辞書。 この辞書はデータ構造の例です。 Web API、データベース、またはその他のデータソースから取得したデータに置き換えることができます。
次に、辞書の後に次のコードを追加します。
. . .
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
、まだ存在していません。 バイナリモードで開きます('b'
)書き込みおよび読み取り用('w+'
). 文字列をに渡す場合は、バイナリモードを使用します markdown.markdownFromFile()
、ファイルシステム上の読み取り可能なファイルへのパスとして解釈されます(つまり、 '/home/file.md'
). また、バイナリモードを使用すると、文字をプラットフォーム固有の表現に変換することに関連する問題を回避できます。 これにより、Pythonプログラムがどのプラットフォームでも同じように動作することが保証されます。
次に、辞書の項目を調べて、国の名前を含む各キーを抽出し、国の名前に保存します。 country
変数。 これに加えて、国の最大の都市のリストを表す値を抽出し、に保存します。 cities
変数。
最初のループ内で、新しい国の名前を書き込みます cities.md
のファイル #
マークダウンヘッダー( <h1>
HTMLタグ)。 \n
改行を挿入するための特殊文字です。 あなたが使う .encode()
ファイルをバイナリモードで開いたためです。 二番目 for
ループは各都市を繰り返し、その名前をMarkdownファイルに次のように書き込みます。 *
リストアイテム( <li>
HTMLタグ)。
最初のループが終了すると、ファイルの最後に移動します。つまり、 markdown.markdownFromFile()
その内容を読み取ることができなくなります。 したがって、 f.seek(0)
ファイルの先頭に戻ります。 通過する前に f
に反対する markdown.markdownFromFile()
入力として、HTMLに変換し、という新しいファイルに保存します。 cities.html
.
完了したら、ファイルを保存して閉じます。
を実行します citygen.py
プログラム:
- python citygen.py
このコマンドは2つのファイルを生成します:
cities.md
:次の内容のマークダウンファイル:
# Japan
* Tokyo
* Osaka
* Nagoya
# France
* Paris
* Marseille
* Lyon
# Germany
* Berlin
* Hamburg
* Munich
cities.html
:の内容を変換した結果を含むHTMLファイルcities.md
:
<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
次のコードを使用します。
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-Markdownコマンドラインスクリプトは、 -m
ライブラリモジュールをスクリプトとして実行するPythonでサポートされているフラグ。 たとえば、Markdownファイルを変換するには、それをに渡すことができます markdown
次のようにコマンドを置き換えます filename.md
変換するファイルの名前:
- python -m markdown filename.md
このコマンドを実行すると、に存在するマークダウンテキストのHTMLコードが出力されます。 filename.md
ファイル。
たとえば、 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ドキュメントに追加する拡張機能。