Python で HTML ファイルを出力する

programming Python

Python に HTML を埋め込み、出力するサンプルコードです。PythonでHTMLを書く、ということです。必要最小限の知識で理解できるようまとめておきます。

以下の環境で動作確認をしています。

環境: Windows 10、Python 3.X

背景 何も使わずに HTML を出力したい

Python でスクリプトを作っていると、新たなパッケージ・ライブラリをインストールすることなく、また、ウェブサーバーなどの特殊環境なしで、HTML ファイルを書き出したくなることがあります。
HTML さえ書き出すことができれば、ブラウザはほとんどのパソコンやスマートフォンに備わっていますので、Pythonの変数などを出力してブラウザで参照できることになります。

そこで、最もベーシックな例として、Python のスクリプトに HTML を埋め込んで出力する方法についてまとめておきます。
本来、もっと高度な方法があるとは思いますが、高度な段階に行く前段の、当たり前の事例がネット検索をしてもあまり見つかりませんでしたので、ポイントを整理しておきます。

設定方法

任意のフォルダを作成してください。
その中に html1.py 等の名前のテキストファイルを作成し、下記のスクリプトをコピー&ペーストして保存してください。

使い方

① コンソール(または開発環境)で上記の Python スクリプト html1.py を実行してください。
→ HTML ファイル(html1.html)が同じフォルダに生成されます。
② html1.html をダブルクリックして、ブラウザで確認してください。
→ ”Hello HTML!” 等と表示されます。

うまく動いたら、スクリプトの文字列などを差し替え、使いたいようにアレンジしてみてください。

説明

PythonでHTMLの埋め込み

・ サンプルコードは、Python のスクリプトに HTMLのテンプレートを書いておき、出力する事例です。うまく動いたら、HTMLファイルをテンプレートとして別ファイルで用意しておき、読み込むように修正してもよいと思います。
・ def write1() としたところで、テキストファイルを出力するための汎用な関数を定義しています。スクリプトの後半で HTML ファイルを出力するときに使います。
・ Pythonでhtmlを書く場合は、スクリプトの str1 = ”’   …    ”’ で示したように、まず、シングルクオーテーション( ‘ )を3つを重ねた記号( ”’ )で文字列を囲みます。
その中に、文字列を書きます。文字列は HTML に限らず、任意の文字列を定義できます。この中には改行を入れることができ、そのまま文字列として定義できます。
・ 具体的には、str1 = ”’ … ”’.format( ) としたところで、ベタ書きのテキストを書き、テンプレートとする HTML の文字列を作っています。HTML の流儀に従い、ヘッダー <head></head><html></html> や body <body></body> 等を含む、複数行のHTMLのコードをテキストとしてそのまま埋め込んでいます。
・ ここでは、CSS も何も使っていない、最もシンプルな HTML ファイルとしています。
このテンプレートに、書式などを入れ込んでいけば、より複雑な HTML を埋め込み、出力できます。

テンプレートに文字列を差し込む

・ 加えて、よく使う事例として、このテンプレートに文字列を差し込むようにしています。
・ 具体的には、テンプレートとなる文字列 str1 の中に {title1}、{body1} を入れています。そして、.format() のカッコ内で定義しているように、{title1} 、{body1} の部分に、2つの文字列をそれぞれ差し込んでいます。
いまは、”hello html”、”hello html!” という2つの文字列を差し込んでいます。
サンプルを動かしてみて、うまく動いたらこの文字列や文字列の個数を変更してみてください。
・ Python のプログラムで、動的に HTML ファイルの内容を変えて出力したい場合は、この部分を修正すればよいことになります。

HTML を出力し、ブラウザで表示できるようにする

・ 続いて、生成した HTML の文字列 str1 を、print() 関数でコンソールに出力しています。HTML の出力をカスタマイズしたければ、この部分を修正すればよいことになります。
・ さらに、”html1.html” というファイル名を定義し、スクリプトが入っているフォルダ内に上記の HTML の文字列を書き出しています。
・ この出力された HTML ファイルをダブルクリックすれば、ブラウザで参照できるようになります。つまり、Pythonの変数などをHTMLを使用して出力し、ブラウザで表示することができます。
・ 別途、Webサーバーを動かすのであれば、ドキュメントルート内にこの HTML ファイルを出力しておけば、スタティックな HTML については表示できることになります。
・ コンソールで出力すれば十分か、テキストファイルとして出力したいか、あるいは Webサーバーで動的な処理をしたいか、などに応じて不要な部分は削除し、修正してください。

まとめ

PythonでHTMLを出力するスクリプトについてまとめました。
たかだか20行程度のプログラムで、Python の変数を出力してHTMLファイルを出力し、ブラウザで表示できるようになりました。

HTML の部分を発展させると、文字列やファイル名を変えたり、Python側で内容を動的に自動更新するなど、自由に応用できることになります。

なお、ここで示したサンプルは、HTML を埋め込んだだけの最もシンプルな事例です。
CSS も JavaScript も、Webサーバーすらも、使っていません。

関連リンクに、カレンダー、図表などを出力する事例などをまとめています。
また、Webサーバー化してHTMLでPythonを動かす、PythonでHTMLを取得、解析、自動化する、などについてもまとめています。
もしも関心があるようでしたら、参考にしてみてください。

関連リンク
・ HTML のカレンダーを生成する 【Python】
・ 配列(リスト)の読み書き・HTML 出力 サンプルコード
・ CSV ファイルを HTML の表に変換する 【Python】
・ HTML のグラフを出力する
・ HTML で図形を出力する 【Python】
・ Python で Web サーバーを動かす 【Windows】
・ Webサーバーで動く Python アプリ 【Windows】
・ ウェブ検索と結果の取得を自動化する【Python & selenium】

サンプルコード

import os

def write1( file1, str1 ): 
    with open( file1, 'w', encoding='utf-8' ) as f1: 
        f1.write( str1 ) 
    return 0 

str1 = '''
<html>
<head>
<meta charset="utf-8">
<title>{title1}</title>
</head>
<body>
{body1} 
</body>
</html>
'''.format( title1 = "hello html", body1 = "hello html!" ) 

print( str1 ) 

path1 = os.path.dirname(__file__) + "/" 
file1 = path1 + "html1.html" 
write1( file1, str1 ) 
タイトルとURLをコピーしました